IE11中的window.ActiveXObject差异

Kev*_*idt 25 javascript internet-explorer-11

在IE11中浏览我们的网站以查找现在已损坏的内容时,我们注意到以下代码未正确评估为"true":

this.isIEBrowser = false;
if (window.ActiveXObject){
    this.isIEBrowser = true;
}
Run Code Online (Sandbox Code Playgroud)

经过进一步研究,似乎typeof(window.ActiveXObject)导致"undefined",而在IE10模式下,它导致"function".当我将window.ActiveXObject添加到监视列表时,它显示为一个函数类型.同样,如果我做typeof(window.ActiveXObject.prototype),我会得到IE11和IE10的"对象".

有没有人知道为什么会改变,或者我可以找到IE10和IE11之间这些类型差异的列表,以便我可以找出其他有哪些重大变化?


更新10/30/13:

当我把它放入时,我原本以为这与IE11 javascript引擎中的Type评价有所不同.我已经意识到这个问题是特定于window.ActiveXObject对象的.所以我把这个问题的名称从"IE11中的Typeof差异"更改为"IE11中的window.ActiveXObject差异"

Joe*_*Joe 20

您不能对IE11使用该检查:

http://msdn.microsoft.com/en-us/library/ie/dn423948%28v=vs.85%29.aspx

从IE11开始,navigator对象支持插件和mimeTypes属性.此外,window.ActiveXObject属性对DOM是隐藏的.(这意味着您不能再使用该属性来检测IE11.)

  • 谢谢乔,这个链接很有帮助.我在[link](http://bugs.jquery.com/ticket/14475)找到了一个与window.ActiveXObject相关的jquery票据,它指向[link](http://msdn.microsoft.com/en-us/库/ ff955298(v = vs.85).aspx)解释ActiveXOBject检测将在条件(我的OP示例)中失败.使用`window.ActiveXObject!== undefined`的jquery票证建议工作,其他地方使用窗口`中的"ActiveXObject"的另一个建议.我也看到了try/catch方法,但是我不想实例化一个activex,只检查它是否存在,因此是IE (9认同)
  • @EricLaw,如果您需要的功能是ActiveX,该怎么办?我不想实例化一个实际的ActiveX对象只是为了检查它. (2认同)
  • @EricLaw,如果我在IE下运行,我需要使用MSXML,一个ActiveX对象,因为IE中的原生XML内容不支持我需要的东西(document.evaluate - 据我所知;如果我是错误我想知道;-)在IE之外我显然需要使用原生.我有一些全局函数可以执行XML操作,我需要在页面加载时将它们设置为正确的实现(MSXML vs Native).我不想实例化MSXML文档.我想我可以在第一次调用XML函数时进行懒惰检查,但这很痛苦.我想要一个简单的方法.;-) (2认同)

mhu*_*mhu 20

以下适用于IE11:

this.supportActiveX = ("ActiveXObject" in window);
Run Code Online (Sandbox Code Playgroud)

但这更好,更可靠:

this.supportActiveX = 
    (Object.getOwnPropertyDescriptor && Object.getOwnPropertyDescriptor(window, "ActiveXObject")) || 
    ("ActiveXObject" in window);
Run Code Online (Sandbox Code Playgroud)


Che*_*n S 6

您可以使用以下代码来检测IE

var iedetect = 0;
if(window.ActiveXObject || "ActiveXObject" in window)
{
    iedetect = 1;
}
Run Code Online (Sandbox Code Playgroud)