IE11で私たちのサイトを調べて、現在何が壊れているかを調べていると、以下のコードが「true」と正しく評価されないことがわかりました。
this.isIEBrowser = false;
if (window.ActiveXObject){
this.isIEBrowser = true;
}
さらに調査すると、typeof(window.ActiveXObject)は"undefined"になりますが、IE10モードでは"function"になります=。 window.ActiveXObjectをウォッチリストに追加すると、関数タイプとして表示されます。同様に、typeof(window.ActiveXObject.prototype)を実行すると、IE11とIE10の両方で"object"を取得します。
なぜこれが変更されたのか、またはIE10とIE11の間のこれらのタイプの違いのリストをどこで見つけることができるのかを知っていますか?
PDATE 10/30/13:
これを入れたとき、私はもともとこれがIE11 javascriptエンジンのType評価との違いだと思っていました。それ以来、この問題はwindow.ActiveXObjectオブジェクトに固有のものであることに気付きました。そのため、この質問の名前を「IE11のTypeofの違い」から「IE11のwindow.ActiveXObjectの違い」に変更しました。
IE11でそのチェックを使用することはできません。
http://msdn.Microsoft.com/en-us/library/ie/dn423948%28v=vs.85%29.aspx
IE11以降、ナビゲーターオブジェクトはプラグインとmimeTypesプロパティをサポートしています。さらに、window.ActiveXObjectプロパティはDOMから隠されています。 (つまり、このプロパティを使用してIE11を検出することはできなくなります。)
以下はIE11で機能します。
this.supportActiveX = ("ActiveXObject" in window);
しかし、これはより良く、より信頼性が高い:
this.supportActiveX =
(Object.getOwnPropertyDescriptor && Object.getOwnPropertyDescriptor(window, "ActiveXObject")) ||
("ActiveXObject" in window);
次のコードを使用してIEを検出できます
var iedetect = 0;
if(window.ActiveXObject || "ActiveXObject" in window)
{
iedetect = 1;
}
この回答 にコメントを追加できません。ごめんなさい。
IE11では 使用不可"ActiveXObject" in window
実際のActiveXサポートを確認するため。
条件ステートメント内で実行すると、ActiveXObject検出が失敗します
IE11で
"ActiveXObject" in window
> true
そして
typeof window.ActiveXObject
> "undefined"
しかし(これはIEが存在する場所です)
window.ActiveXObject !== undefined
> true
どうやらこのチェックだけが信頼できる
typeof window.ActiveXObject !== "undefined"
> false
IE10
typeof window.ActiveXObject !== "undefined"
> true
実際、私が観察しているのは、IE9でこれらの両方がtrueと評価されることです。
this.supportActiveX = (typeof window.ActiveXObject !== 'undefined');
this.supportActiveX = ("ActiveXObject" in window);
しかし、IE11では、最初のステートメントはfalseと評価され、2番目のステートメントはtrueと評価されます。この動作の説明はありませんが、(ウィンドウ内の「ActiveXObject」)オプションの方が信頼性が高いことを示唆しています。
私は「あの男」になりたくないが、
this.supportActiveX = (typeof window.ActiveXObject !== 'undefined')
undefinedは代入可能であるため、mhuの答えよりも若干安全です。
ライブラリのサンプルコード:
if (document.implementation && document.implementation.createDocument && typeof XSLTProcessor != 'undefined') {
// chrome, firefox etc
}
else try {
// IE
var xml = new ActiveXObject("MSXML2.DOMDocument");
var xsl = new ActiveXObject("Microsoft.XMLDOM");
}
catch (e) {
// no support
console.log('transformxml: no browser support');
return null;
}