jQuery 1.4.2 の xhr.abort() が IE7 でエラーになる問題の回避方法
2010/10/18 追記 jQuery 1.4.3 が正式にリリースされ、この問題は解決されています。特に問題がない場合は jQuery 1.4.3 を使いましょう。
#6498 (XHR abort() method not working in IE7.)
– jQuery Core
- Bug Tracker
jQuery 1.4.2 のバグに3時間くらいはまっていたので、忘れないようにメモ。
回避方法
詳細は "Object doesn't support this property or method" from jQuery 1.4.1 in IE7 ONLY - jQuery Forum を参照してください。ここでは回避方法のみ記載します。
RC1 を製品に組み込むわけにはいかなかったので、今回は前者で対処しました。
ActiveX 版 XHR を使う
面倒なので、$.ajaxSetup で全体の動作をオーバーライド。
$.ajaxSetup({
xhr: function() {
if ($.browser.msie && $.browser.version.substr(0,1) <= 7) {
return new ActiveXObject("Microsoft.XMLHTTP");
} else {
return new XMLHttpRequest();
}
});
jQuery 1.4.3 RC1 を使う
jQuery Blog » jQuery 1.4.3 Release Candidate 1 Released
jQuery 1.4.3 RC1 では直っているっぽいので、それを使えばOK。
以下、jQuery 1.4.3 RC1 の修正された部分のコード抜粋
try {
var oldAbort = xhr.abort;
xhr.abort = function() {
// xhr.abort in IE7 is not a native JS function
// and does not have a call property
if ( xhr && oldAbort.call ) {
oldAbort.call( xhr );
}
onreadystatechange( "abort" );
};
} catch( abortError ) {}1.4.2 までは↓でした。
try {
var oldAbort = xhr.abort;
xhr.abort = function() {
if ( xhr ) {
oldAbort.call( xhr );
}
onreadystatechange( "abort" );
};
} catch(e) { }