ActiveX自定义事件无法在IE11上运行

yus*_*ulx 12 internet-explorer activex internet-explorer-11

我将IE从版本10升级到11,发现我的ActiveX自定义事件无法正常工作.

原因是IE11不再支持attachEvent,似乎我必须使用addEventListener.例如以前我用过的

obj.attachEvent("onSelected", method1); 
Run Code Online (Sandbox Code Playgroud)

现在,它是

obj.addEventListener("onSelected",method1,false); 
Run Code Online (Sandbox Code Playgroud)

更改代码后,无法触发method1.我不知道如何将自定义事件(在ActiveX插件中实现)绑定到JS方法并使其在IE11上运行?

kay*_*ahr 13

到目前为止,我发现IE 11的唯一方法是使用for...event脚本块:

<script for="myActiveX" event="onSelected(param1, param2)">
  method1(param1, param2);
</script>
<object id="myActiveX" ...></object>
Run Code Online (Sandbox Code Playgroud)

这两个元素也可以使用JavaScript动态创建.您只需确保for使用setAttribute方法设置属性:

var handler = document.createElement("script");
handler.setAttribute("for", "myActiveX");
handler.event = "onSelected(param1, param2)";       
handler.appendChild(document.createTextNode("method1(param1, param2);"));
document.body.appendChild(handler);

var activeX = document.createElement("object");
activeX.id = "myActiveX"; 
activeX.codebase = "foobar.cab";
activeX.classid = "CLSID:123456789-1234-1234-1234-123456789012";
document.body.appendChild(activeX);
Run Code Online (Sandbox Code Playgroud)

较旧的IE版本(IE 8及更早版本)不喜欢上述代码.对于这些旧版浏览器,您必须使用以下方法传递codebase参数和for参数createElement:

var handler = document.createElement('<script for="myActiveX">');
...
var activeX = document.createElement('<object classid="CLSID:123456789-1234-1234-1234-123456789012">');
Run Code Online (Sandbox Code Playgroud)

较新的浏览器在遇到此代码时会抛出异常,因此要支持所有IE版本,必须捕获此异常,然后使用其他方法.