最近修改老旧的MFC项目,用的网页做界面,和HTML交互采用的是COM方式,繁琐,丑陋又性能低下,于是考虑利用js来进行界面交互,查了一天的资料,现在整理如下,供后来需要的人参考,虽然大概几乎不会有人用MFC来做项目了(笑),用winform或者WPF或者网页做界面,高性能部分用C++封装的dll也许是更好的选择,当然直接在exe里面提供http访问接口是最吼的(go语言赛高)!界面这个是比较大的话题,可以开个专题慢慢说了。。。

核心的一个CWebPage类是一个老外写的,封装了js的COM操作,用来和webbrowser进行js调用,但是只能调用已经存在的js代码,有时需要自己向网页注入一些js函数(你懂的),你可以在一个空白页上面,用js生成整个页面。

    IHTMLDocument2* pHTMLDoc = (IHTMLDocument2*)web.get_Document();
if(pHTMLDoc != NULL)
{
IHTMLWindow2* pHTMLWnd;
pHTMLDoc->get_parentWindow( &pHTMLWnd );
if (pHTMLWnd != NULL)
{
CString js_code;
js_code="function test(str){ alert(str);return str;}";//此次为实际写入的javascript代码
//js_code.Format(L"goToLocation('%s');",JScode);//JS函数名+参数
VARIANT ret;
pHTMLWnd->execScript(js_code.AllocSysString(), L"Javascript", &ret);//执行javascript代码
pHTMLWnd->Release(); CWebPage page;
page.SetDocument(web.get_Document());
CComVariant varResult;
page.CallJScript("test","",&varResult);
MessageBox(CString(varResult.bstrVal));
}
pHTMLDoc->Release();
}

先向网页注入(这样听上去比较高大上)一个js函数(代码只是方法之一,还有其他的方法就不列举了),然后通过webpage封装的方法调用函数并返回值,这样做的会比C++用COM接口操作网页简单而且速度更快(并没有测试,理论上应该是这样)

这里只是解决MFC调用js,js调用MFC比较复杂也就没有去深入,COM这种东西感觉真的是上古遗物了,项目里使用的是截获网页的跳转地址来判断需要进行的操作,基本上已经足够了,记得winform里的webbrowser和js互相调用是将对象封装成一个com对象暴露给webbrowser。

源码:下载

MFC与Webbrower交互(通过JS)的更多相关文章

  1. aspx 页面中 js 引用与页面后台的数据交互 --【 js 调后台】

    后台调用 js 方法 前台调用后台方法与变量:  后台被调用的方法必须是public 或 protected 后台被调用的方法必须是静态的static 方法一:通过WebService来实现 步骤: ...

  2. JS与OC交互,JS中调用OC方法(获取JSContext的方式)

    最近用到JS和OC原生方法调用的问题,查了许多资料都语焉不详,自己记录一下吧,如果有误欢迎联系我指出. JS中调用OC方法有三种方式: 1.通过获取JSContext的方式直接调用OC方法 2.通过继 ...

  3. 小程序组件交互 -- 传入js

    1.父组件(wxml页面)向子组件传递 在子组件中定义需要传入的属性 properties: { count: { type: Number, value: 0, observer:function( ...

  4. WinForm程序执行JS代码的多种方法以及使用WebBrowser与JS交互

    方法一 使用微软官方组件Interop.MSScriptControl 1.msscript.ocx下载的地址   http://www.microsoft.com/downloads/details ...

  5. 关于FlexPaper 2.1.2版本 二次开发 Logo 、打印、搜索、缩略图、添加按钮、js交互、右键菜单、书签等相关问题

    2015-03-02 更新文章,由于需求修改,更改了flexpaper插件,故增加第9.10.11小节,下载代码时请注意. 先废话几句.最近用到文档在线浏览功能,之前用的是print2flash(一个 ...

  6. js 与 ios Android交互

    一.android 交互 1.js调用webview 在android API Level 17及以上的版本中,就会出现js调用不了android的代码,这是版本兼容的问题,需要在调用的方法上面加一个 ...

  7. 第4章-Vue.js 交互及实例的生命周期

    一.学习目标 了解实例生命周期的过程 理解钩子函数的作用 掌握Vue.js过滤器的使用方法 (重点) 能够使用网络请求进行前后端交互 (重点.难点) 二.交互的基本概念 2.1.前端和后端的概念 说明 ...

  8. Android 中 js 和 原生交互

    Android中的WebView 中加载的URL 默认是在手机浏览器中加载的,我们可以覆盖这种默认的动作,让网页在WebView中打开.通过设置WebView的WebViewClent 达到这个效果. ...

  9. Qtl和JS、HTML通信/交互

    http://www.cnblogs.com/sigma0/p/7346727.html Qt的QWebChannel和JS.HTML通信/交互驱动百度地图 0 前言 我一个研究嵌入式的,不知道怎么就 ...

随机推荐

  1. 用Spring Tools Suite(STS)开始一个RESTful Web Service

    spring.io官方提供的例子Building a RESTful Web Service提供了用Maven.Gradle.STS构建一个RESTFul Web Service,实际上采用STS构建 ...

  2. “茴”字有四种写法,this也是一样

    说到这个地方又想起以前高中还是初中学的<孔乙己>这个梗,但是这里的this显然实用性比那个要大很多,哈哈. 简单来说,this有四种应用场景,分别是在构造函数上.对象属性中.普通函数中.c ...

  3. python数据分析工具包(3)——matplotlib(一)

    前两篇文章简单介绍了科学计算Numpy的一些常用方法,还有一些其他内容,会在后面的实例中学习.下面介绍另一个模块--Matplotlib. Matplotlib是一个Python 2D绘图库,试图让复 ...

  4. cloud9 ide

    https://github.com/tekacs/cloud9 http://www.pjhome.net/article/Javascript/nodeJS_IDE_cloud9.html htt ...

  5. linux 下yum使用技巧

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 经常会遇上一些linux系统允许你上外网,而一些是不允许的,这时我们 ...

  6. Maven json包找不到解决办法

    在Maven中央仓库找到Maven的jar <dependency> <groupId>net.sf.json-lib</groupId> <artifact ...

  7. NTP 时间同步协议

    http://www.faqs.org/rfcs/rfc1305.html port:123

  8. PAT Public Bike Management (dfs)

    思路:你的答案必须满足三个条件: 1.在所有路径中选择最短的: 2.如果路径相等,则选择从PBMC中送出最少的: 3.如果路径相等且PBMC送出的车也相等,则选择带回最少的. 注意:这题很恶心,你要考 ...

  9. SpringBoot CGLIB AOP解决Spring事务,对象调用自己方法事务失效.

    对于像我这种喜欢滥用AOP的程序员,遇到坑也是习惯了,不仅仅是事务,其实只要脱离了Spring容器管理的所有对象,对于SpringAOP的注解都会失效,因为他们不是Spring容器的代理类,Sprin ...

  10. JS-随机生成的密码

    randPassword(size) =>{ //数组 let seed = new Array('A','B','C','D','E','F','G','H','I','J','K','L', ...