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. linux 两个进程通过 共享内存 通信例子

    例子1:两个进程通过共享内存通信,一个进程向共享内存中写入数据,另一个进程从共享内存中读出数据 文件1 创建进程1,实现功能,打印共享内存中的数据 #include <stdio.h> # ...

  2. wget 下载文件

    # -c 继续执行上次终端的任务# --http-user http用户名# --http-passwd http密码# --no-check-certificate 不检查ssl/tsl证书. wg ...

  3. 解决Google Chrome浏览器字体模糊的问题

    之前使用Google的Chrome浏览器一直觉得有时候,其显示的字体比较模糊,不管是Windows XP还是Windows 7都会出现要么显示的网页字体模糊,要么是Chrome浏览器本身显示的菜单模糊 ...

  4. (PASS)什么是原子性和原子性操作?

    什么是原子性操作呢? 下面我举一个例子来说明一下: A想要从自己的帐户中转1000块钱到B的帐户里.那么从A开始转帐,到转帐结束的这一个过程,称之为一个事务.在这个事务里,要做如下操作: 1. 从A的 ...

  5. lib 和 dll 的区别、生成以及使用详解 ~~包含示例代码~~(转)

    原文章地址:https://www.cnblogs.com/TenosDoIt/p/3203137.html#c 首先介绍一下静态库(静态链接库).动态库(动态链接库)的概念,首先两者都是代码共享的方 ...

  6. Wordpress 文章编辑页面添加 metabox

    add_meta_box($id,$title,$callback,$screen,$context:,$priority); 参数 $id (字符串)(必需)Meta模块的 HTML"ID ...

  7. PKUSC订正

    Day1 T2:最大前缀和 枚举答案集合(不直接枚举答案数,相当于状态的离散化),这个集合成为答案当且仅当存在方案使得答案集合的排列后缀和>=0(如果<0就可以去掉显然更优),答案补集的前 ...

  8. SQL Server SQLBindCol

    说明 编辑 版本引入:ODBC 1.0 遵从标准:ISO 92 功能说明: SQLBindCol将应用程序的数据缓冲绑定到结果集的各列 函数原型: SQLRETURN SQLBindCol( SQLH ...

  9. Java中的并发库学习总结

    我们都知道,在JDK1.5之前,Java中要进行业务并发时,通常需要有程序员独立完成代码实现,当然也有一些开源的框架提供了这些功能,但是这些依然没有JDK自带的功能使用起来方便.而当针对高质量Java ...

  10. spring注解方式配置以及spring4的泛型注入 (4)

    目录 一.@Controller 注解控制层(action) 二.@Service 注解服务层 三.@Repository 持久层 四.spring4的泛型注入测试 1 创建两个实体User和Role ...