蒋老大:这是微软的BUG吗? 关于IWebBrowser2和IActiveScript
我在一个测试应用中,创建WebBrowser窗口,并且创建了IActiveScript脚本引擎(JS脚本引擎)。仅仅是创建,并不做更多的事情,大多数情况下运行正常,但是在特定情况下程序一定CRASH,找不到原因,下表列出测试用例:
window1: 表示是否创建第一个浏览器窗口
event1: 表示是否跟第一个浏览器窗口的DWebBrowserEvents2建立了事件连接
window2: 表示是否创建第二个浏览器窗口
event2: 表示是否跟第二个浏览器窗口的DWebBrowserEvents2建立了事件连接
IActiveScript: 表示是否创建了脚本引擎接口
Result: 运行结果
===============================================================================================================
window1 event1 window2 event2 IActiveScript Result
===============================================================================================================
no no yes ok <--仅仅使用脚本引擎,无问题
yes yes yes yes no ok <--仅仅打开多个浏览器,无问题
yes no no yes ok
yes no yes no yes ok
yes no yes yes yes CRASH
yes yes no yes ok
yes yes yes no yes CRASH
yes yes yes yes yes CRASH
经过无数次的测试表明,当启用脚本引擎时(即使不执行任何脚本代码),在打开两个浏览器的情况下,只要有任意一个浏览器建立了事件通知,程序一定CRASH,位置是随机的。
测试用的浏览器宿主窗口是ATL的CAxWindow,或者我自己实现的容器窗口,结果一致。
其实测试用例分了更多细类,包括把三个部件放到不同的线程,结果还是一样,有一点可以肯定,发生CRASH的线程一定是加载脚本引擎的线程。
网上搜索未果,特向蒋老大咨询,本来想向你提问,但是系统老提示你不存在:(,希望老大有空能自己尝试一下,并能找到问题原因。对了,测试平台是vista,XP并未测试。