您的位置:首页 > Web前端 > HTML

分享一下CHtmlView指定IE内核版本崩溃问题及解决办法

2014-02-19 13:59 375 查看
相关环境:

Win7 64位

MFC工程 UNICODE字符类型

相关技术点:

为进程指定用到的IE版本

/article/2378606.html

问题引出:

最近做一个类似浏览器的应用,加载网页地址url。我是自己写的一个类,继承自CHtmlView,然后做一些处理。

其中涉及到了必须得指定IE内核的操作。但是遇到个很莫名其妙的问题,当用户电脑的IE内核版本为IE9时,如果指定进程中的CHtmlView使用IE9内核的话,程序就会在调用窗口过程函数时

即文件wincore.cpp中的428行

1--> LRESULT CALLBACK

_AfxActivationWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)

中的

2--> if (bCallDefault)

lResult = CallWindowProc(oldWndProc, hWnd, nMsg, wParam, lParam);

处出现崩溃的情况。因此我详细做了一个测试,如下表所示:



表头的7000、8888等代表修改注册表SOFTWARE\\Microsoft\\Internet Explorer\\MAIN\\FeatureControl\\FEATURE_BROWSER_EMULATION下的数值,即指定IE版本

数值具体含义请参考:http://msdn.microsoft.com/en-us/library/ee330730%28v=vs.85%29.aspx

Wrong代表CHtmlView在加载网页时,在调用窗口过程函数时(即上面的2-->处)出现崩溃情况

Right代表没有出现崩溃情况

从测试结果可以看出,当IE内核为IE9时,如果我们指定CHtmlView用的IE内核为IE9或IE11版本时,则程序会出现在调用窗口过程函数时崩溃的情况。我不知道这是为什么,是否跟页面上有某些控件有关。但当遇到这种情况时,我们可以避开在IE9上指定IE9或IE11内核

PS:如果用户电脑上的最新版本是IE9,此时即使你指定IE10或IE11,CHtmlView使用的版本也只能是IE9,即当前最高版本。可是为什么我测试结果中,IE内核为IE9时,我指定IE9、IE11都出现崩溃情况,但指定IE10没有任何问题?不知道这是什么原因,感兴趣的可以在这探讨下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: