从IWebBrowser2获取IHTMLDocument2的Script对象,执行指定的JS脚本
2013-07-05 14:57
357 查看
ATL控件嵌入在一个网页内, 在ATL控件内获取网页的IWebBrowser2指针, 并获取对应的网页元素对象, 如Document, Script等
[cpp] view
plaincopy
CComPtr<IWebBrowser2> m_pIWebBrowser;
CComPtr<IHTMLDocument2> m_pDocument;
CComPtr<IDispatch> m_pScript;
BOOL GetIWebBrowser()
{
IOleClientSite* pClientSite;
GetClientSite(&pClientSite);
if (pClientSite == NULL)
return FALSE;
CComQIPtr<IServiceProvider> pISP(pClientSite);
if (pISP == NULL)
return FALSE;
pISP->QueryService(IID_IWebBrowserApp, IID_IWebBrowser2,(void **)&m_pIWebBrowser);
if (m_pIWebBrowser == NULL)
return FALSE;
//取得IHTMLDocument2
m_pIWebBrowser->get_Document((IDispatch**)&m_pDocument);
if (m_pDocument == NULL)
return FALSE;
//获取脚本对象
m_pDocument->get_Script(&m_pScript);
if (m_pScript == NULL)
return FALSE;
return TRUE;
}
//根据获取到的脚本对象, 可执行一段脚本函数
void InvokeWebScript(BSTR srciptName)
{
CComBSTR bstrMember(srciptName);
DISPID dispid;
HRESULT hr;
if(m_pScript!=NULL)
{
hr = m_pScript->GetIDsOfNames(IID_NULL,&bstrMember,1,LOCALE_SYSTEM_DEFAULT,&dispid);
if (SUCCEEDED(hr))
{
DISPPARAMS dispparams;
memset(&dispparams, 0, sizeof(DISPPARAMS));
dispparams.cArgs = 0;
dispparams.cNamedArgs = 0;
EXCEPINFO excepInfo;
memset(&excepInfo, 0, sizeof(EXCEPINFO));
CComVariant vaResult;
// initialize to invalid arg
UINT nArgErr = (UINT)-1;
// 执行js代码
hr = m_pScript->Invoke(dispid,IID_NULL,0,DISPATCH_METHOD,&dispparams,&vaResult,&excepInfo,&nArgErr);
}
}
}
[cpp] view
plaincopy
CComPtr<IWebBrowser2> m_pIWebBrowser;
CComPtr<IHTMLDocument2> m_pDocument;
CComPtr<IDispatch> m_pScript;
BOOL GetIWebBrowser()
{
IOleClientSite* pClientSite;
GetClientSite(&pClientSite);
if (pClientSite == NULL)
return FALSE;
CComQIPtr<IServiceProvider> pISP(pClientSite);
if (pISP == NULL)
return FALSE;
pISP->QueryService(IID_IWebBrowserApp, IID_IWebBrowser2,(void **)&m_pIWebBrowser);
if (m_pIWebBrowser == NULL)
return FALSE;
//取得IHTMLDocument2
m_pIWebBrowser->get_Document((IDispatch**)&m_pDocument);
if (m_pDocument == NULL)
return FALSE;
//获取脚本对象
m_pDocument->get_Script(&m_pScript);
if (m_pScript == NULL)
return FALSE;
return TRUE;
}
//根据获取到的脚本对象, 可执行一段脚本函数
void InvokeWebScript(BSTR srciptName)
{
CComBSTR bstrMember(srciptName);
DISPID dispid;
HRESULT hr;
if(m_pScript!=NULL)
{
hr = m_pScript->GetIDsOfNames(IID_NULL,&bstrMember,1,LOCALE_SYSTEM_DEFAULT,&dispid);
if (SUCCEEDED(hr))
{
DISPPARAMS dispparams;
memset(&dispparams, 0, sizeof(DISPPARAMS));
dispparams.cArgs = 0;
dispparams.cNamedArgs = 0;
EXCEPINFO excepInfo;
memset(&excepInfo, 0, sizeof(EXCEPINFO));
CComVariant vaResult;
// initialize to invalid arg
UINT nArgErr = (UINT)-1;
// 执行js代码
hr = m_pScript->Invoke(dispid,IID_NULL,0,DISPATCH_METHOD,&dispparams,&vaResult,&excepInfo,&nArgErr);
}
}
}
相关文章推荐
- 从IWebBrowser2获取IHTMLDocument2的Script对象,执行指定的JS脚本
- 获取js对象中的指定数据
- JS获取对象指定属性在样式中的信息
- RegisterStartupScript或RegisterClientScriptBlock注册js脚本而无法执行的问题分析
- 简易 Javascript DOM 包 | 元素水平垂直居中 | 动态执行 JS 代码 | 获取指定元素
- $.getScript("test.js", function(){ ··· });。其实应该指定test.js中哪个函数,这个是特殊情况,指定的是ready函数,即页面加载后就执行的函数
- js获取指定节点对象的样式属性的值的封装函数(兼容ie、Opera和符合w3c标准浏览器)
- js获取指定节点对象的样式属性的值的封装函数(兼容ie、Opera和符合w3c标准浏览器)
- Windows Script Control msscript.ocx c# .net 执行js 脚本
- shell在指定目录下批量执行sql脚本
- js 获取事件对象以及元素
- 关于Js脚本的延迟执行
- 在JQuery 中 获取原生 js 对象
- js获取对象的属性和方法总结
- 【转】获取/设置IFRAME内对象元素的几种JS方法
- JS根据key值获取URL中的参数值及把URL的参数转换成json对象
- js 获取json对象的Key、value
- JS之Date对象和获取系统当前时间详解
- Python3基础 getattr 获取一个对象的指定属性值
- 常用工具类,文件和内存的大小获取,shell脚本的执行