2

我有一个在 IE6、7、8 和9 Beta上运行的工作代码,但在 IE9 RC 上崩溃。我可以看到网页正在成功使用 ActiveX 的界面,但是当我尝试从 ActiveX 调用 IDispatch::Invoke 时,ActiveX 崩溃了。

我的应用程序由 CHtmlView(IE 容器)、网页(GUI)和 ActiveX(应用程序本身)构成,我看到网页成功使用了 ActiveX 的界面,但是当我尝试将数据发送回网页时,我崩溃了。

调试代码后(vs2005 c++)我发现所有的IDispatch函数都会导致崩溃,但是这种行为只在RC版本中重现,我们的产品已经运行了大约3年没有问题,现在每个升级到RC的客户端不能再使用我们的产品了。

是否有任何变化会导致这种行为?根据在线文档,我找不到任何东西。谢谢。

4

2 回答 2

1

IE9RC引入了 ActiveX 过滤:

Internet Explorer 9 RC 允许您阻止所有站点的 ActiveX 控件,然后仅使用新的 ActiveX 筛选选项为您信任的站点重新打开它们。

于 2013-10-05T19:34:16.187 回答
1

经过艰苦的努力,我找到了答案(2年前)。那时我关闭了 IE9 论坛上的问题,但我忘了关闭这个帖子。

谢谢@Paul Sweatte 提醒我。

我们的框架工作如下:

  1. activex 和 web 有一组已知的字符串,例如:“onStart”、“onPause”等...
  2. 网络将在引擎中注册该功能。
  3. activex 会在需要时调用回调

第二部分是问题,显然在旧的 IE 版本中,javascript eval 函数会创建 IDispatch 对象,您可以将对象传递给 activex。

在 IE9 以及许多其他更改中,这也发生了变化,并且 eval 将返回其他内容。

当 activex 尝试执行回调时,就会发生崩溃。这是......非常难以调试。

于 2013-10-06T07:29:40.873 回答