WTL IWebBrowser2调用网页中javascript函数
转自:http://blog.csdn.net/tujiaw/article/details/6556880
1.简单的含有js的网页:
- <html>
- <head>
- <mce:script type = "text/javascript"><!--
- function test(){
- document.write("hello world!");
- }
- function test2(){
- alert("hello, world");
- }
- function link(){
- window.location.href = "http://www.baidu.com";
- }
- test();
- // --></mce:script>
- </head>
- <body>
- <p><a href = "javascript:link()">this is js link</a></p>
- </body>
- </html>
2.WebBrowser ActiveX控件成员变量:
- CComPtr<IWebBrowser2> m_pWb2;
3.在OnInitDialog中
- CAxWindow wndIE = GetDlgItem(IDC_IE);
- HRESULT hr;
- hr = wndIE.QueryControl(&m_pWb2);
- if (m_pWb2)
- {
- CComVariant v;
- m_pWb2->Navigate(CComBSTR(_T("...//test.html")), &v, &v, &v, &v); // 这里地址省略了,注意要用//
- }
4.在OnOk函数里测试
- LRESULT OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
- {
- // TODO: Add validation code
- HRESULT hr;
- CComPtr<IDispatch> spdispDoc;
- hr = m_pWb2->get_Document(&spdispDoc);
- if (FAILED(hr))
- {
- return hr;
- }
- CComQIPtr<IHTMLDocument2> spDoc = spdispDoc;
- VARIANT ret;
- ret.vt = VT_EMPTY;
- return WtlCallJavascript(spDoc, CComBSTR("test2()"), &ret);
- //CloseDialog(wID); // 屏蔽掉回车关闭对话框
- }
上面需要的函数
- LRESULT WtlCallJavascript(CComQIPtr<IHTMLDocument2> htmlDoc, BSTR strCode, VARIANT *pvarRet)
- {
- HRESULT hr = -1;
- if (!(htmlDoc && strCode))
- {
- return hr;
- }
- IHTMLWindow2 *pHtmlWnd;
- hr = htmlDoc->get_parentWindow(&pHtmlWnd);
- if (SUCCEEDED(hr))
- {
- hr = pHtmlWnd->execScript(strCode, CComBSTR(_T("javascript")), pvarRet);
- }
- return hr;
- }
运行程序后它会打开我们的html网页, 然后按Enter键会弹出hello, world小的提示窗口说明js里的那个函数执行了。
插入WebBrowser控件的方法可以看这里:WTL 通过IWebBrowser2接口使WebBrowser控件在自己的窗口打开网页
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。