zoukankan      html  css  js  c++  java
  • C++调用JS,JS调用C++

    JS调用C++,通过设置DIID_HTMLDocumentEvents事件,来捕获HTMLWINDOW上的事件,再通过事件对象的get_srcElement得到事件源,从而得到指定元素对象,从而获取元素的信息得到脚本传过来的数据,来进行调用
     
    还可以通过window对象的IDispatchEx接口来动态的增加一个元素,提供一个IDISPATCH接口给JS去调用
     
    还可以通扩展IDocHostUIHandler接口来提供window.External来供脚本调用
     
     
    这些利用也可以扩展到IActiveScript接口
     
    1 hr = pdispexWindow->GetDispID(L"kws_checkVirus", fdexNameCaseSensitive, &kws_checkVirusId);
    2
    3 if (FAILED(hr))
    4 {
    5 hr = pdispexWindow->GetDispID(L"kws_checkVirus", fdexNameEnsure, &kws_checkVirusId);
    6
    7 if (FAILED(hr))
    8 goto exit0;
    9
    10 IDispatch* pkws_checkVirus = new kws_checkVirus;
    11 DISPPARAMS pParams = {0}, pParamsNo = {NULL, NULL, 0, 0};
    12 VARIANT varkws_checkVirus;
    13 DISPID dispkws_checkVirus = DISPATCH_PROPERTYPUT;
    14 VariantInit(&varkws_checkVirus);
    15 varkws_checkVirus.vt = VT_DISPATCH;
    16 varkws_checkVirus.pdispVal = pkws_checkVirus;
    17
    18 pParams.rgvarg = &varkws_checkVirus;
    19 pParams.rgdispidNamedArgs = &dispkws_checkVirus;
    20 pParams.cArgs = 1;
    21 pParams.cNamedArgs = 1;
    22
    23 hr = pdispexWindow->Invoke(
    24 kws_checkVirusId,
    25 IID_NULL,
    26 LOCALE_SYSTEM_DEFAULT,
    27 DISPATCH_PROPERTYPUT|DISPATCH_PROPERTYPUTREF,
    28 &pParams,
    29 NULL,
    30 NULL,
    31 NULL);
    32 if (SUCCEEDED(hr))
    33 hr = e_NEW;
    34
    35 }
     
    C++调用JS通过IHTMLDocument的get_Script,然后再GetIdOfNames得ID,再INVOKE来调指定的函数,还可以调用execscript来执行脚本
     
  • 相关阅读:
    联赛模拟测试19
    联考Day5
    联赛模拟测试18(A.施工未补)
    题解 CF960G 【Bandit Blues】
    题解 P5518 【[MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题】
    概率与数学期望笔记
    题解 P3704 【[SDOI2017]数字表格】
    主定理
    【题解】Hikari与组合数
    【题解】P2303 [SDOI2012] Longge 的问题
  • 原文地址:https://www.cnblogs.com/blogpro/p/11426704.html
Copyright © 2011-2022 走看看