怎样在IE10中调用js的脚本
来源:互联网 发布:浙江省信访局网络投诉 编辑:程序博客网 时间:2024/05/17 04:01
在IE10中调用js的脚本,首先想到IE10中active控件。说做SSLVPN客户端的真苦逼,不断对付windows的升级,ie的升级,杀软的阻挠。
最近发现win8下sslvpn客户端可以安装,不能使用。调试了一下,发现js根本没有调用。
经过和vip菜鸟的讨论,他也没发现代码问题,但是建议根据返回值看看是否调用成功。
pScript->Invoke返回值0X80020003,无效的调用。
仔细看了一下
hr = pScript->GetIDsOfNames(IID_NULL, &bstrMember, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
得到的dispid是-1,hr的值是0X80020006 (DISP_E_UNKNOWNNAME)未知名称。
感到奇怪的是,这段代码在以前的IE版本中运行很正常。
看了一下csdn,建议使用
LPOLESTR pwFunName = L"m_strTest"; // 准备取得 Add 函数的序号 DispID
DISPID dispID; // 取得的序号,准备保存到这里
hr = pDispatch->lpVtbl->GetIDsOfNames( // 根据函数名,取得序号的装修报价函数…
真是胡扯。
看了一下msdn,了解到
While IDispatch->GetIDsOfNames() fails to get a Dispatch ID of the variable in IE9, it turns out that using the result from get_Script() as IDispatchEx instead of IDispatch and calling:
这就很简单了,
CComPtr<IDispatchEx> pDispEx;
hr = pDisp->QueryInterface(IID_IDispatchEx, (void**)&pDispEx);
得到IDispatchEx指针,
HRESULT hr = pDispEx->GetDispID( CComBSTR( name ), fdexNameImplicit, &id );
代替
HRESULT hr = pDisp->GetIDsOfNames( IID_NULL, &name, 1, LOCALE_SYSTEM_DEFAULT, &id )
然后使用IDispatchEx::InvokeEx ,他的参数传递和invoke 有很大区别。
基本就是这个样子
IDispatch *disp = pszBufData->pdispVal;
if (pszBufData->vt & VT_BYREF)
disp = *(pszBufData->ppdispVal);
// Get IDispatchEx on input IDispatch
CComQIPtr<IDispatchEx> pdispexArray(disp);
if ( ! pdispexArray )
return E_NOINTERFACE;
// Get array length DISPID
DISPID dispidLength;
CComBSTR bstrLength(L"length");
HRESULT hr = pdispexArray->GetDispID(bstrLength, fdexNameCaseSensitive, &dispidLength);
if (FAILED(hr))
return false;
// Get length value using InvokeEx()
CComVariant varLength;
DISPPARAMS dispParamsNoArgs = {0};
hr = pdispexArray->InvokeEx(dispidLength, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &dispParamsNoArgs, &varLength,
NULL, NULL);
if (FAILED(hr))
return hr;
ATLASSERT(varLength.vt == VT_I4);
const int count = varLength.intVal;
BYTE * pData = new BYTE[count];
// For each element in source array:
for (int i = 0; i < count; i++)
{
CString strIndex;
strIndex.Format(L"%d", i);
// Convert to BSTR, as GetDispID() wants BSTR's
CComBSTR bstrIndex(strIndex);
DISPID dispidIndex;
hr = pdispexArray->GetDispID(bstrIndex, fdexNameCaseSensitive, &dispidIndex);
if (FAILED(hr))
break;
// Get array item value using InvokeEx()
CComVariant varItem;
hr = pdispexArray->InvokeEx(dispidIndex, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &dispParamsNoArgs, &varItem,
NULL, NULL);
if (FAILED(hr))
break;
ATLASSERT(varItem.vt == VT_I4);
pData[i] = varItem.intVal;
}
- 怎样在IE10中调用js的脚本
- IE10中activex控件调用js脚本
- 在C#的ajax中的timer触发函数中怎样调用页面元素和引用JS脚本函数?
- 怎样在页面中调用JS文件
- 怎样在java代码中调用执行shell脚本
- 怎样在IIS中写Python的CGI脚本
- linux shell在一个脚本中调用其它的脚本
- 在shell脚本中调用另一个脚本的三…
- java中调用js脚本
- java中调用js脚本
- java中调用js脚本
- 怎样在java代码中调用Oracle的存储过程
- 怎样在C#中调用Delphi6写的DLL
- 怎样在wincvs中使用python脚本
- Unity--在C#脚本中调用JS脚本函数并传参
- java中调用js脚本 学学还是有用的
- 在shell脚本中调用另一个脚本
- Windows 8的IE10在浏览器安全测试中独占鳌头
- Merge k Sorted Lists -- LeetCode
- Gson的数据解析
- CSS系列2-定位3:清除浮动2
- Android游戏开发基础
- SODBASE CEP学习进阶篇(二):日志采集-Flume
- 怎样在IE10中调用js的脚本
- cxf笔记
- printf函数使用
- 第十一周阅读程序5:基类与派生类的构造函数与析构函数
- struts2的DefaultActionMapper
- 《Linux内核修炼之道》 之 高效学习Linux内核 (上篇)
- IBM 3650M4 服务器 东莞现货
- onvif开发实战2--2015年5月20日总结框架搭建
- For Beibi