OperaはComet+JSONP出来ない
IEとCometの相性が悪いで書いた問題を回避するため,複数ドメインを使うことにした.
まぁ,この問題の他にも,同一ドメインには同時2本しか接続がはれないので,そのドメインで同時に1つしか閲覧されないという前提が無い限りは,複数ドメインにしておいた方が良いと言うこともあった.
複数ドメインに分けると,クロスドメインの制約があるためにAjaxが使えなくなる.
そこで,JSONPを使うわけだけども,ここでまた問題が...
OperaでJSONP+Cometすると,Cometの応答が返ってくるまで,すべてのJavaScriptが止まってしまう.
どうやら,scriptタグでスクリプトを読み込んでいる間は,JavaScriptの実行が止まってしまう模様.
仕方なく,Operaの場合はAjaxを使うようにして回避...
また,scriptタグを付け足す方式なので,エラーチェックが出来ないのも難点.
Ajaxではサーバとの接続が切れれば,すぐにエラーが返ってくるのに,
scriptタグの場合はタイムアウトを待つしかない.
この辺も不便.
うーん,結局AjaxでCometするにしても,JSONP+Cometするにしても色々めんどくさい.
チャットとかやりたい場合は,Flash+XMLSocketを使って通信して,
Flash / JavaScript Integration kitとか使ってJavaScript側に制御を渡すのが楽そう?
詳しくは見ていないけど,チャベリというサイトが
Flash+XMLSocket+JavaScriptでやっているぽい.
The comments to this entry are closed.
Comments
document.domainに共通の上位ドメインを設定することで、クロスドメインの制限は回避できませんか?
http://www.mozilla.org/projects/security/components/same-origin.html
Posted by: rui | Friday, June 01, 2007 10:37 AM
document.domain と XHR を組み合わせる技については、以下の URL が先駆的な試みだと思いますが、Opera だと上手くいかないと書いてありますね。最近だとできるのかな...
http://fettig.net/weblog/2005/11/30/xmlhttprequest-subdomain-update/
Posted by: kazuho | Friday, June 01, 2007 11:14 AM
ruiさん,kazuhoさん,コメントありがとうございます.
リンク先を確認してみましたが,なかなかブラウザ依存が多くて難しそうですね.
やはりFLASHが正解に思えてきました.(^^;
Posted by: みかげ | Sunday, June 03, 2007 01:43 PM