概要
...
inif (window.XMLHttpRequest) { ... }
は、standard-XHRがサポートされている場合にのみ評価されます。それ以外の場合、ActiveXはIE5-6をサポートするために使用されます。
XMLHttpRequest
API仕様がサポートされているかどうかを確認するには、グローバルXMLHttpRequest
オブジェクトが存在するかどうかをテストします。はグローバルオブジェクトなので、プロパティwindow
の存在を確認するだけです。{1}window.XMLHttpRequest
以下に示すの!
は、論理NOT演算子であり、内部の結果を表示するために使用されif (window.XMLHttpRequest)
ます。
if (window.XMLHttpRequest)
// Supported:
!!window.XMLHttpRequest === !![object XMLHttpRequest] === !false === true
// Not supported, so the property does not exist, and is undefined
!!window.XMLHttpRequest === !!undefined === !true === false
しかし、それで話は終わりではありません。XHRの概念は、ブラウザに最初に実装したMicrosoftから、ActiveXObject
InternetExplorer5.0を介して生まれました。その後、バージョン7.0で、Microsoftは標準化されたXHRAPIのサポートを追加しました。
IE5についてはもう誰も気にしません。ただし、IE6ユーザーの数はまだかなり多くなっています(約1%)。したがって、次の方法でIE5-6をサポートすることも問題ありません。
... } else { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
{1}:考慮すべき他の方法:
if (typeof window.XMLHttpRequest !== 'undefined')
-これも機能します。
if (XMLHttpRequest)
-使用しないでください。変数が存在しない場合(=宣言されていない場合)、ReferenceError:
XMLHttpRequestは未定義です`がスローされます