随着人们对客户端软件界面要求的不断提高,软件开发商面临着一个问题:如何快速廉价开发出各种丰富效果的UI界面。设计出一套丰富控件的界面库是不容易的,且产品经理丰富的想法和UED对效果的追求,往往会使程序员疲于编写这些“效果控件”。目前市面上使用的很多界面库是基于XML描述的,界面引擎解析这些XML并渲染出其对应的效果。其实我们网页也是这样的原理,只是其复杂程度往往比市面上的界面库要复杂的多,且是无窗口控件(减少内存)。于是重用IE便成为一种很好的解决软件开发商面临问题的方法。
“拿人东西手短”,我们使用IE控件,体验着其便利,但是也往往会遇到IE默认设置对我们控件的影响。举个很简单的例子,QQ2011(其他版本没试过)的历史聊天记录部分就是通过JS加载聊天内容,如果你在IE设置中将“脚本设置”设置为“禁用”,你将看不到聊天记录。或许在用户遇到这样的问题时会询问其客服如何解决,客服可能会让他把他的“脚本设置”设置为“启用”,但是对于这样的少数用户,其一定有其将该选项设置为“禁用”的理由。我们程序员该做的就是如何设计好自己的程序,让其对用户不良的影响减少。
针对“如何在内嵌IE网页中消除IE默认设置影响”,微软其实已经给了我们例子。
这是个MFC的例子,对于如果界面库是基于MFC的来说,完全可以参考这个例子。
我主要来谈谈WTL的界面库中的解决方案。
我在codeproject上找到了一个WTL的IE内嵌窗口的demo,其中已经加好了我要入的内容,只是有些内容写法“存在”问题。我把一些关键点罗列下:
以上是头文件
以上是CPP中文件
以上只是主要列出主要的改动点。其中主要说下ProcessUrlAction和QueryService两个函数。ProcessUrlAction是消除IE默认脚本设置的关键。其中
这句就是说,不管用户设置的是“启用”、“禁用”或“提示”,本内嵌IE对活动脚本的设置都是“启用”。
(这里面的很多设置都可以在这个函数中进行修改)
还有个要注意的地方就是QueryService中的实现(非常重要),很多网上的方法中都是如此写的
我想所有曾期望解决此问题的同学都遇到一个问题:如此写的话,那么ProcessUrlAction永远都进不去。当初我也纠结于这个问题,后来我注意了下QueryService,发现此处的hr一直不会是S_OK。在没有办法的情况下,我就将代码改为:
如此改完后,问题就解决了,也没引入其他问题。至于为什么,可能只有微软知道了,或许该处就应该返回S_OK,而不是根据AddRef的返回值来决定返回值。
希望所有使用IE控件的界面库设计同学都能很好的解决这个问题。
以下是微软提供的MFC修改版和WTL修改版的工程,其中MFC是VC6的,需要include最低vs2003的库。WTL是VC9的。
分享到:
相关推荐
QT内嵌IE功能实现,放在完整QT开发文件夹内,可直接QT打开
最近在一个qt的界面里需要播放flash, 可是呢,这个兼容性非常不好,所以干脆直接插入一个ie的控件,以后移植其他系统的时候再说啦,,呵呵,,分享一下,代码很简单,但是非常爽哦,,,
在默认配置(QWebEngineProfile)中植入 Javascript 内容,这样脚本会在所有打开的网页中执行,不论跳转到哪个网址。 Javascript 脚本使用网址中的路径名,判断当前网页位置,从而决定执行哪种操作。 python 代码...
众所周知,IE浏览器的性能是很差的,特别在使用诸如 WebQQ 2.0 这样的丰富的网页应用时,你就能明显感觉到 IE的内核 和 谷歌浏览器的webkit内核 之间的性能差异了,那么有没办法提高 IE 的性能呢? Chrome Frame 是...
win32/c++, 使用vs2015开发,给使用内嵌IE的进程设置IE版本为最新版本,通过此设置,保证使用的IE是最新的,有利于兼容性问题的解决
HGE窗口内嵌在MFC程序中,HGE作为子窗口。其中关键部分是要重写MFC消息循环。 编译环境VS2003
在unity中打开网页,并使用,unity内嵌网页插件,unity内嵌网页插件
NULL 博文链接:https://java-xb.iteye.com/blog/1013164
air内嵌网页 as3 移动端
我们可以在弹出的窗口中播放含有列表的视频,也可以放一个内嵌的网页,为了方便演示,烈火添加了www.veryhuo.com首页,您还可以添加其他的,例如:企业产品展示,视频网站相关列表播放等,稍加改造,它就是你的了。
适用于做unity内嵌网页,只需要下载导入unity即可。功能 - 将网站渲染为2D或3D对象 - Chromium后端; 一流的支持:HTML,CSS和JavaScript - 从Unity 调用JavaScript¹ - 从JavaScript调用Unity¹ - 透明或不透明的...
一个比较完整的MFC浏览器,可以基本实现常用的需求,还有一点遗憾是有时点击链接会调起IE,我会尽快完善
Unity中内嵌网页插件 UniWebView 3 跨平台 亲测可用
unity 内嵌网页
Unity内嵌网页插件,内嵌浏览器,支持Android和IOS。已打包成unitypackage,可直接导入使用,详细使用方法见http://blog.csdn.net/home_498/article/details/51918041
就想弄一个winform结合html5的一个小东西,突有心血来潮,想在里面嵌套一个微信网页版,下面小编给大家介绍下HTML阻止iframe跳转页面并使用iframe在页面内嵌微信网页版的实现方法,一起看看吧
在asp页面中内嵌flash,但是有时你会发现在一些浏览器中flash无法正常显示(如:ie)。
Java内嵌IE、谷歌浏览器所需要的jar
一个能实现上网功能的web浏览器,内嵌IE浏览器