XmlHttpWebRequest を使用して、Safari、Firefox、および IE で機能するようにするには、どのような問題があるかを確認しようとしていますか?
4 に答える
おそらく最も明白な違いは、最初に XMLHttpRequest を取得する方法です。
var xhr;
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest(); // Mozilla/Webkit/Opera
} else if (window.ActiveXObject) {
xhr = new ActiveXObject('Msxml2.XMLHTTP'); // IE
} else {
throw new Error('Ajax likely not supported');
}
そうは言っても、jQueryなどの抽象化ライブラリを強く検討したいと思います。それは ajax のようなものを途方もなく簡単にします:
$('#container').load('/ajax/resource');
XMLHttpRequest 実装で見つかったすべての主要なバグに関する非常に優れた記事と、まったく同じ XMLHttpRequest オブジェクトを公開しながらこれらのバグを回避する XMLHttpRequest ラッパーの非常に軽量な実装があります。
その質問で手を汚した人は次のとおりです。
http://www.webmasterworld.com/javascript/3195000.htm
これらの質問を調査する一般的な方法の 1 つは、jQuery などの JavaScript ライブラリのソース コードを調べることです。これは、ライブラリの機能の 1 つが違いを処理することだからです。XMLHttpRequest を処理する jQuery のスニペットを次に示します。ブラウザの違いに関するコメントに注意してください。
// Create the request object; Microsoft failed to properly
// implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available
var xhr = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
// Open the socket
// Passing null username, generates a login popup on Opera (#2865)
if( s.username )
xhr.open(type, s.url, s.async, s.username, s.password);
else
xhr.open(type, s.url, s.async);
// Need an extra try/catch for cross domain requests in Firefox 3
try {
これがちょっと的外れな回答であることは承知していますが、組み込みの一貫性のないブラウザ間の方法を使用すると、この種のことで気が狂ってしまいます。任意の JavaScript ライブラリを選択して、安堵のため息をつきます。