从IWebBrowser2获取IHTMLDocument2的Script对象,执行指定的JS脚本
2010-05-13 14:19
441 查看
ATL控件嵌入在一个网页内, 在ATL控件内获取网页的IWebBrowser2指针, 并获取对应的网页元素对象, 如Document, Script等
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脚本
- Windows Script Control msscript.ocx c# .net 执行js 脚本
- 简易 Javascript DOM 包 | 元素水平垂直居中 | 动态执行 JS 代码 | 获取指定元素
- js获取指定节点对象的样式属性的值的封装函数(兼容ie、Opera和符合w3c标准浏览器)
- 获取js对象中的指定数据
- js获取指定节点对象的样式属性的值的封装函数(兼容ie、Opera和符合w3c标准浏览器)
- RegisterStartupScript或RegisterClientScriptBlock注册js脚本而无法执行的问题分析
- $.getScript("test.js", function(){ ··· });。其实应该指定test.js中哪个函数,这个是特殊情况,指定的是ready函数,即页面加载后就执行的函数
- JS获取对象指定属性在样式中的信息
- JS之Date对象和获取系统当前时间详解
- JS实现选定指定HTML元素对象中指定文本内容功能示例
- Android系统Recovery工作原理之使用update.zip升级过程分析(八)---解析并执行升级脚本updater-script
- Exchangee 2010 获取邮箱的脚本执行方法-前一篇文章提到的脚本执行方法!
- 通过二次加载脚本,解决Ajax加载的页面中JS脚本不执行问题
- js中执行脚本字符串方法:window.eval()/eval()
- EL表达式获取数据/执行运算/获取web开发中的对象
- python 脚本(获取指定文件夹、指定文件格式、的代码行数、注释行数)
- asp.net 后台程序和前台js脚本哪个先执行
- JS获取对象的某个CSS属性值的问题
- js获取地址栏参数,分离并保存为对象