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来执行脚本
 

C++调用JS,JS调用C++的更多相关文章

  1. egret调用页面js的方法。

    参考文献: http://bbs.egret-labs.org/thread-267-3-1.html http://docs.egret-labs.org/post/manual/threelibs ...

  2. Android-webview和js互相调用

    Android-webview和js互相调用 Android 和 H5 都是移动开发应用的非常广泛.市面上很多App都是使用Android开发的,但使用Android来开发一些比较复杂附属类,提示性的 ...

  3. ASP.NET后台调用前台JS函数的三种常见方法

    第一种:使用普通的添加控件中的Attributes属性进行调用 例如,像一般的普通的按钮:Button1.Attributes.Add("onclick","MyFun( ...

  4. 关于action script与js相互调用的Security Error问题

    大家都知道,as和js相互调用可以通过ExternalInterface.call和ExternalInterface.addCallback来进行. 比较好的做法是使用之前通过ExternalInt ...

  5. JS如何调用隐藏按钮的click事件

    js如何调用隐藏按钮的click事件:1.设定隐藏不要使用Visiable属性,使用style.display=none:2.触发JS事件可以使用fireEvent方法,如:document.getE ...

  6. JS方式调用本地的可执行文件

    看到一个方法,有些用,先存下来,有用的时候再用. 前几天,在IE,FIREFOX中实现了用JS方式调用本地的可执行文件.地址:www.yihaomen.com/article/js/211.htm , ...

  7. 前台JS(Jquery)调用后台方法 无刷新级联菜单示例

    前台用AJAX直接调用后台方法,老有人发帖提问,没事做个示例 下面是做的一个前台用JQUERY,AJAX调用后台方法做的无刷新级联菜单 http://www.dtan.so CasMenu.aspx页 ...

  8. asp.net 调用前台JS调用后台,后台掉前台JS

    C#前台js调用后台代码前台js<script type="text/javascript" language="javascript"> func ...

  9. WebView使用详解(一)——Native与JS相互调用(附JadX反编译)

    念念不忘,必有回响,永远坚持你所坚持的! 一直在用WebView,还没有系统的总结过它的用法,下面就系统的总结下,分享给大家 一.基本用法 1.加载在线URL void loadUrl(String ...

  10. OC与JS互相调用

    近期项目中要用到html5来实现.涉及到OC调用JS,以及JS调用OC的方法.这里把遇到的问题以及实现方法介绍一下. // // ViewController.h // OC_And_JS // // ...

随机推荐

  1. Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实 现)interface(接口

    匿名的内部类是没有名字的内部类.不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现

  2. Windows的ODBC配置指南: MySQL, PostgreSQL, DB2, Oracle

    MySQL- 官网: https://dev.mysql.com/downloads/connector/odbc/- 安装: * msi格式, 直接安装即可 * zip格式, 解压缩, 命令行(管理 ...

  3. Batch - %~dp0 modifiers

    %~dp0 简易解释 The variable %0 in a batch script is set to the name of the executing batch file. The ~dp ...

  4. cmake -help

    { Usage cmake [options] <path-to-source>  cmake [options] <path-to-existing-build> Speci ...

  5. FFmpeg Download

    https://ffmpeg.zeranoe.com/builds/

  6. Zookeeper_Paxos算法

    Paxos算法 算法简介 Paxos算法是莱斯利-兰伯特在1990年提出的一种基于消息传递的.具有容错性的一致性算法,Google Chubb(分布式锁服务)的作者Mike Burrwos说过,世上只 ...

  7. thinkphp 缓存驱动

    缓存驱动默认位于Think\Cache\Driver命名空间下面,目前已经提供了包括APC.Db.Memcache.Shmop.Sqlite.Redis.Eaccelerator和Xcache缓存方式 ...

  8. IIS反向代理解决Web前端跨域

    1.1 IIS7反向代理解决跨域问题IIS的版本必须是IIS7及其以上,否则没有反向代理功能:按照以下步骤来配置IIS,以实现反向代理: 1.2 配置步骤1. 下载安装ARR(Application ...

  9. ncurses库的介绍与安装

    Frm: http://blog.csdn.net/Mary_Jane/article/details/50769631 介绍 ncurses(new curses)是一套编程库,它提供了一系列的函数 ...

  10. 剑指offer——01数组中重复的数字

    题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...