zoukankan      html  css  js  c++  java
  • c/c++/MFC 调用 js 函数代码(自家用)

     熊健 2009.12.22 于 武汉

    调用函数代码和示例
      1 首先 .h 文件中定义:
      2 
      3  CComPtr<IHTMLWindow2> m_sphtmlWnd;
      4  CComPtr<IHTMLDocument2> m_spHtmlDoc;
      5 
      6 
      7 
      8 //方法1 可以取得返回值。。。。。
      9 
     10 //调用方法示例:stringArray为传入参数列表,getSum为js函数,pVarResult 为返回值
     11 
     12 /* CStringArray stringArray;
     13  stringArray.RemoveAll();
     14  stringArray.SetSize(5); 
     15  stringArray[0].Format(L"%d",m_poiStart.x);
     16  stringArray[1].Format(L"%d",m_poiStart.y);
     17  stringArray[2].Format(L"%d",m_poiEnd.x);
     18  stringArray[3].Format(L"%d",m_poiEnd.y);
     19  stringArray[4].Format(L"%d",a + 1);
     20  CComVariant pVarResult = CallJScript(L"getSum", stringArray);*/
     21 
     22 bool Cems_mysql_appView::GetJScript(CComPtr<IDispatch>& spDisp)
     23 {
     24  m_spHtmlDoc =  (IHTMLDocument2*)(GetHtmlDocument());
     25  if(m_spHtmlDoc == NULL)
     26  {
     27   return false;
     28  }
     29  HRESULT hr = m_spHtmlDoc->get_Script(&spDisp);
     30  ATLASSERT(SUCCEEDED(hr));
     31  return SUCCEEDED(hr);
     32 }
     33 
     34 CComVariant Cems_mysql_appView::CallJScript(const CString strFunc,const CStringArray& paramArray)
     35 {
     36  //Getting IDispatch for Java Script objects
     37  CComPtr<IDispatch> spScript;
     38  if(!GetJScript(spScript))
     39  {
     40   return false;
     41  }
     42  //Find dispid for given function in the object
     43  CComBSTR bstrMember(strFunc);
     44  DISPID dispid = NULL;
     45  HRESULT hr = spScript->GetIDsOfNames(IID_NULL,&bstrMember,1,
     46   LOCALE_SYSTEM_DEFAULT,&dispid);
     47  if(FAILED(hr))
     48  {
     49   return false;
     50  }
     51 
     52  const int arraySize = paramArray.GetSize();
     53  //Putting parameters
     54  DISPPARAMS dispparams;
     55  memset(&dispparams, 0sizeof dispparams);
     56  dispparams.cArgs      = arraySize;
     57  dispparams.rgvarg     = new VARIANT[dispparams.cArgs];
     58  dispparams.cNamedArgs = 0;
     59 
     60  forint i = 0; i < arraySize; i++)
     61  {
     62   CComBSTR bstr = paramArray.GetAt(arraySize - 1 - i);
     63   // back reading
     64   bstr.CopyTo(&dispparams.rgvarg[i].bstrVal);
     65   dispparams.rgvarg[i].vt = VT_BSTR;
     66  }
     67  EXCEPINFO excepInfo;
     68  memset(&excepInfo, 0sizeof excepInfo);
     69  CComVariant vaResult;
     70  UINT nArgErr = (UINT)-1;      // initialize to invalid arg
     71  //Call JavaScript function
     72  hr = spScript->Invoke(dispid,IID_NULL,0,DISPATCH_METHOD,&dispparams,&vaResult,&excepInfo,&nArgErr);
     73  delete [] dispparams.rgvarg;
     74  if(FAILED(hr))
     75  {
     76   return false;
     77  }
     78  return vaResult;
     79 }
     80 
     81 
     82 
     83 //方法2 
     84 
     85 /*调用方法,不必多说。
     86 
     87 CString str;
     88  str.Format(L"getSum(%d,%d,%d,%d,%d)",m_poiStart.x,m_poiStart.y,m_poiEnd.x,m_poiEnd.y,a+1);
     89  ExecScript(str);
     90 
     91 */
     92 HRESULT Cems_mysql_appView::ExecScript(CString strjs)
     93 {
     94  HRESULT hr;
     95  m_spHtmlDoc =  (IHTMLDocument2*)(GetHtmlDocument());
     96  if(m_sphtmlWnd == NULL)
     97  {
     98   hr = m_spHtmlDoc->get_parentWindow(&m_sphtmlWnd);//获取脚本指针
     99  }
    100  CComBSTR bstrjs = strjs.AllocSysString();
    101  CComBSTR bstrlan = SysAllocString(L"javascript");
    102  VARIANT varRet;
    103  hr = m_sphtmlWnd->execScript(bstrjs, bstrlan, &varRet);
    104  //m_sphtmlWnd = NULL;
    105  return 1;
    106 }
    107 
  • 相关阅读:
    Selenium3+python3自动化(十六)--单选框和复选框(radiobox、checkbox)
    Selenium3+python3自动化(十五)--JS处理滚动条,window.scrollTo(xpos,ypos)
    Selenium3+python3自动化(十四)--alertsconfirmprompt
    Selenium3+python3自动化(十三)--select下拉框
    Selenium3+python3自动化(十二)--iframe
    UPC-5627 Boxes(思维)
    UPC-5007 High Score(计算)
    UPC-5003 Dunglish(模拟)
    Hrbust-1830 第一个重复出现的数(线段树区间最值查询)
    UPC-5599 Minimum Sum(线段树求区间最小值+二分区间计数)
  • 原文地址:https://www.cnblogs.com/SuperXJ/p/1630018.html
Copyright © 2011-2022 走看看