2009年06月07日

Windows Mobile + Opera Mobile + jQuery + Ajax

Opera Mobile には window.ActiveXObject は存在するものの、ActiveXObject("Microsoft.XMLHTTP") ではオブジェクト生成に失敗するようだ。
その辺が原因で jQuery で Ajax を使おうとすると Opera Mobile でコケるのだが、元々 Opera Mobile 自体が jQuery でサポート対象外のせいかオフィシャルではここの生成処理が修正されないらしい。

で、jQuery は $.ajaxSetup() で XMLHttpRequest オブジェクト生成処理を上書きしたりできるようになっているので、そこを各自摩り替えて使ってね、という話らしい。

$(function(){
$.ajaxSetup({
xhr:function(){
return window.ActiveXObject && !jQuery.browser.opera ?
new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
}
})
});


元々の処理に !jQuery.browser.opera を追加して opera の時は常に new XMLHttpRequest() を使うようにしたコードだけど、これで問題なく動くようになった(参照元)。

ただし jQuery 1.3 以降 jQuery.browser が Deprecated になっているので、これが本当に望ましい処理かというと結構微妙で、XMLHttpRequest の有無で判断するようなコードの方が今後はいいのかもしれない、と思ってこんなコードを書いてみた。

$(function(){
$.ajaxSetup({
xhr:function(){
return typeof XMLHttpRequest != 'undefined' ?
new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
}
})
});

動作確認:
IE6
Firefox(1.0.8, 1.5.0.10, 2.0.0.20, 3.0.10)
Chrome(1.0.154.65, 2.0.172.30)
Opera9.6
Safari(Win/OSX共に3.2.1)
Opera Mobile 9.5 for WILLCOM03
Konqueror 3.5.8
本来のサポート環境以外も手元にあるもので色々と試してみたが、この部分のコードだけに限っていえば以上の環境で上手く動いている模様。

日本語でこの辺の話が見当たらなかったので一応書いておいた。


posted by oov at 17:59| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント

この記事へのトラックバック