在C++中用WebBrowser控件调用JavaScript函数 .

本文介绍了一个C++函数CallJScript,用于从C++环境中调用网页内的JavaScript函数。该函数通过IDispatch接口与浏览器交互,并传递参数。此外,还介绍了获取IHTMLDocument2和IDispatch对象的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要函数 CallJScript

  1. BOOL CallJScript(const wchar_t * func, VARIANT * vtParams, int cNumberOfParam, VARIANT * vtResult)  
  2. {  
  3.     if(!func || !func[0])  
  4.         return FALSE;  
  5.     CComPtr<IDispatch> spScript;  
  6.     spScript = GetJScript();  
  7.     if(!spScript)  
  8.         return FALSE;  
  9.     DISPID dispID = NULL;  
  10.     CComBSTR bstrFunc(func);  
  11.     HRESULT hr = spScript->GetIDsOfNames(IID_NULL, &bstrFunc, 1, LOCALE_SYSTEM_DEFAULT, &dispID);  
  12.     if(FAILED(hr))  
  13.         return FALSE;  
  14.     DISPPARAMS dispParams = {0};  
  15.     dispParams.cArgs = cNumberOfParam;  
  16.     dispParams.rgvarg = new VARIANT[cNumberOfParam];  
  17.     for(int i = 0; i < cNumberOfParam; ++i)  
  18.     {  
  19.         VariantInit(&dispParams.rgvarg[i]);  
  20.         VariantCopy(&dispParams.rgvarg[i], &vtParams[cNumberOfParam - 1 - i]);  
  21.     }  
  22.     hr = spScript->Invoke(dispID, IID_NULL, 0, DISPATCH_METHOD, &dispParams, vtResult, NULL, NULL);  
  23.     delete [] dispParams.rgvarg;  
  24.     if(FAILED(hr))  
  25.         return FALSE;  
  26.     return TRUE;  
  27. }  

其它函数

  1. IHTMLDocument2 * GetIDocument2()  
  2. {  
  3.     if(!m_pWebBrowser2) return NULL;  
  4.     IDispatch *pIDispatch = NULL;  
  5.     if (SUCCEEDED(m_pWebBrowser2->get_Document(&pIDispatch)) && pIDispatch)  
  6.     {  
  7.         IHTMLDocument2 *pIDocument2 = NULL;  
  8.         if (SUCCEEDED(pIDispatch->QueryInterface(IID_IHTMLDocument2, (void**)&pIDocument2)))  
  9.         {  
  10.             pIDispatch->Release();  
  11.             return pIDocument2;  
  12.         }  
  13.         pIDispatch->Release();  
  14.     }  
  15.     return NULL;  
  16. }  
  17. IDispatch * GetJScript()  
  18. {  
  19.     CComPtr<IHTMLDocument2> doc;    
  20.     doc = GetIDocument2();  
  21.     if(!doc)  
  22.         return NULL;  
  23.     IDispatch * dsScript = NULL;  
  24.     HRESULT hr = doc->get_Script(&dsScript);  
  25.     if(SUCCEEDED(hr) && dsScript)  
  26.         return dsScript;  
  27.     else  
  28.         return NULL;  
  29. }  

来源 :http://blog.youkuaiyun.com/yyan/article/details/4799541

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值