【问题标题】:Attaching to ActiveX Events in Internet Explorer 9在 Internet Explorer 9 中附加到 ActiveX 事件
【发布时间】:2011-07-05 02:40:50
【问题描述】:

我已经通过 Internet Explorer 中的 HTML <option> 元素嵌入了一个 ActiveX 控件,它可以播放来自 Cisco 视频服务器的视频。

为了让播放器播放,我为 ActiveX 控件的 onPlayerLoaded 事件编写了一个回调函数。

我的代码在 IE 7 - 9 中工作,但仅在我使用 Microsoft 专有的 attachEvent 函数时。

JavaScript 示例:

if(this.axClient.attachEvent) 
    { this.axClient.attachEvent("onPlayerLoaded", onPlayerLoadedEventHandler); }

我心中的标准纳粹真的很想使用 addEventListener 而不是这样......

if(this.axClient.addEventListener)
    { this.axClient.addEventListener("onPlayerLoaded", onPlayerLoadedEventHandler, false); }
else if(this.axClient.attachEvent) 
    { this.axClient.attachEvent("onPlayerLoaded", onPlayerLoadedEventHandler); }

(从IE 9开始,支持addEventListener。)

不幸的是,当我使用 addEventListener 时,回调函数永远不会被调用。

我没有太多使用 ActiveX 控件的经验,所以我假设我可能会遗漏一些关于它们的细微差别。

鉴于 ActiveX 是 Microsoft 的专有技术,我们是否应该继续使用 attachEvent 而不是 addEventListener? (ActiveX 中是否有一些固有的东西迫使我们继续使用 attachEvent?

或者这是 AciveX 控件的发布者可以解决的问题吗? (例如,是否有针对 ActiveX 的新实践来利用 IE 9 更符合标准的特性。)

或者鉴于 ActiveX 是专有的,我是否应该不必太担心它们的标准...? ;)

【问题讨论】:

  • 我不知道这是否重要,因为我不擅长编写脚本,但我注意到当您使用 addEventListener 时,“onPlayerloaded”中有一个小写“L”和一个大写“ L' 使用 attachEvent "onPlayerLoaded" 时。
  • @Maurizo 这只是我的问题中的一个错字,我刚刚更正了。在 JavaScript 中 很重要,因为该语言是区分大小写的。好眼力!

标签: javascript activex internet-explorer-9 web-standards


【解决方案1】:

我在尝试使 addEventListener 与我的FireBreath 插件一起工作时研究了同样的问题。由于 FireBreath 插件适用于所有主流浏览器,我很高兴在 IE9 中支持 addEventListener,这样一切都可以完全一样地工作。

想象一下,当我发现在对象上调用 addEventListener 时没有以任何方式调用或通知插件/activex 控件上的任何 API(它们都没有)时,我会感到震惊。 attachEvent 在 ActiveX 控件上使用了一个名为 Connection Points 的接口,在 Firefox 上,我们必须自己实现 addEventListener 和 removeEventListener 方法,但在 IE9 上它只是拦截这些调用,不返回错误,然后它们消失在 void 中。

{讽刺}太棒了!微软加油!{/讽刺}

【讨论】:

猜你喜欢
  • 2013-06-10
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多