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) { }