IWebBrowser2调用javascript
先看下代码,如下
void MyBrowser::CallJavaScript(OLECHAR FAR* funcName)
{
HRESULT hr;
IDispatch* pDocDispatch = NULL;
IDispatch* pScriptDispatch = NULL;
IHTMLDocument2* pDocument = NULL;
DISPID dispid;
m_pBrowser->get_Document(&pDocDispatch);
if(SUCCEEDED(hr))
{
hr = pDocDispatch->QueryInterface(IID_IHTMLDocument2,(void**)&pDocument);
if(SUCCEEDED(hr))
{
hr = pDocument->get_Script(&pScriptDispatch);
if(SUCCEEDED(hr))
{
CComBSTR funNameStr(funcName);
hr = pScriptDispatch->GetIDsOfNames(IID_NULL, &funNameStr, 1,LOCALE_SYSTEM_DEFAULT, &dispid);
if(SUCCEEDED(hr))
{
DISPPARAMS dispparams;
memset(&dispparams, 0, sizeof(dispparams));
dispparams.cArgs = 0; nParamCount;
dispparams.rgvarg = new VARIANT[dispparams.cArgs];
dispparams.cNamedArgs = 0;
EXCEPINFO excepInfo;
memset(&excepInfo, 0, sizeof excepInfo);
CComVariant vaResult;
UINT nArgErr = (UINT)-1; initialize to invalid arg
hr = pScriptDispatch->Invoke(dispid,IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_METHOD,&dispparams,NULL,&excepInfo,&nArgErr);
}
}
}
}
}
m_pBrowser 是IWebBrowser2对象。在这里GetIDsOfNames总是执行失败,返回值的提示是未知的名称,好像是没有找到相关函数,但是网页里面的确是有这个函数的。奇怪的是,当我在网页onload时调用了一下这个函数后,再执行这个方法时GetIDsOfNames就返回成功了。好像需要先调用一下,才能找到。但是找到后,invoke那里却异常了。很头疼,不知道什么原因,迫切需要大家的帮助,谢谢。
void MyBrowser::CallJavaScript(OLECHAR FAR* funcName)
{
HRESULT hr;
IDispatch* pDocDispatch = NULL;
IDispatch* pScriptDispatch = NULL;
IHTMLDocument2* pDocument = NULL;
DISPID dispid;
m_pBrowser->get_Document(&pDocDispatch);
if(SUCCEEDED(hr))
{
hr = pDocDispatch->QueryInterface(IID_IHTMLDocument2,(void**)&pDocument);
if(SUCCEEDED(hr))
{
hr = pDocument->get_Script(&pScriptDispatch);
if(SUCCEEDED(hr))
{
CComBSTR funNameStr(funcName);
hr = pScriptDispatch->GetIDsOfNames(IID_NULL, &funNameStr, 1,LOCALE_SYSTEM_DEFAULT, &dispid);
if(SUCCEEDED(hr))
{
DISPPARAMS dispparams;
memset(&dispparams, 0, sizeof(dispparams));
dispparams.cArgs = 0; nParamCount;
dispparams.rgvarg = new VARIANT[dispparams.cArgs];
dispparams.cNamedArgs = 0;
EXCEPINFO excepInfo;
memset(&excepInfo, 0, sizeof excepInfo);
CComVariant vaResult;
UINT nArgErr = (UINT)-1; initialize to invalid arg
hr = pScriptDispatch->Invoke(dispid,IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_METHOD,&dispparams,NULL,&excepInfo,&nArgErr);
}
}
}
}
}
m_pBrowser 是IWebBrowser2对象。在这里GetIDsOfNames总是执行失败,返回值的提示是未知的名称,好像是没有找到相关函数,但是网页里面的确是有这个函数的。奇怪的是,当我在网页onload时调用了一下这个函数后,再执行这个方法时GetIDsOfNames就返回成功了。好像需要先调用一下,才能找到。但是找到后,invoke那里却异常了。很头疼,不知道什么原因,迫切需要大家的帮助,谢谢。
...全文
相关推荐
MFC对话框里利用CHtmlView加载界面(二)————MFC调用JaveScript - CSDN博客1
1、获取IWebBrowser(ActiveX 插件) 初始化对象接口 2、根据1中的初始化接口, 获取组件的 IID_IHTMLDocument2 对象 接口
JS调用C++的webbrowser
这是一个c++内web实现模拟登陆,还有获取web事件,以及c++与js的交互。 http://blog.csdn.net/nanjun520/article/details/53024503
通过窗口句柄获得IWebBrowser2和IHTMLDocument2接口
通过窗口句柄获得IWebBrowser2和IHTMLDocument2接口,里面是源代码,分享给大家
activex回调js
页面调用activex控件及c#回调页面js方法,将activex信息返回页面,测试前请运行debug文件夹中的1.bat将activex控件注册后,直接打开示例页面即可
最原始的win32中内嵌IWebBrowser(c++)
基于win32(非MFC)使用IWebBrowser,实现自定义浏览器的功能,代码很清晰,可以作为初学者的入门级代码,方便后续的扩展使用


