GWは暇だったのでAjaxその他のお勉強

数年前に作ったQuickIRCというJava AppletをAjaxで書きなおせるか試してみた。

QuickIRCはアプレットから直接IRCサーバに接続してチャットを行うプログラムなんだけど、Microsoft Java VMの制約でUIがかなり古臭い。JavaScriptからDOMを制御すればUIがリッチになるだろう…という目論見。

作っている最中に、通信と文字コード変換だけ共通インタフェースにすれば複数の接続方式を同時に扱えることに気がついた。

  • AjaxIRC接続…外部にIRC-HTTPプロクシが必要。遅延は実用範囲内。プロクシ経由の接続でいいならコレが正解か。OperaではXMLHttpRequestのレスポンスが文字化けするようで、PDA方面ではちょっと難しそう。W3CがクロスドメインXMLHttpRequestを検討中という話もある。
  • JavaAppletからIRC接続…Microsoft Java VMではAppletだけIRCサーバと同じホストにあれば良かったが、Sun Java Plug-inではHTML文書と同じホストにないといけない。複数のサイトから個別にアプレットを読み込んで複数サーバ接続を目論んでいたが難しいようだ。Eolas特許の関係でIE上のプラグインは外部JavaScriptからアクティブ化する手順が必要になったとか、Appletは非推奨なのにプラグインを読むための要素がIEFireFoxで異なるとか、動的にオブジェクトを追加する手順に一工夫必要とか、クラスロードが終わる前にJavaScriptに戻ってくるからロード完了をチェックする必要があるとか、Operaではプラグイン要素をDOMで扱いにくいとか、色々と細かい問題があるが…プロクシを経由せずにIRCサーバと接続して、文字コード変換まで行えるプラグインは現状コレしかない。
  • FlashからIRC接続…XMLSocketを生Socketぽく使えるらしい。現行のFlashでは文字コード変換は不可能そうなので、文字コード変換を行うIRCプロクシが必要になるだろう。将来的にはFlash9でバイナリデータを扱えるようになるそうだ。接続先の制約はAjaxより若干緩い。Flashを置いてあるホストと同じドメインまたは同じサブドメイン(例: www.flash.com上のFlashムービーはxml.flash.comからファイルを読める)。
  • Comet…HTTPサーバがレスポンスを継続的に流し続けるハックらしい。コンテンツフィルタ型のHTTPプロクシや、セッションに時間制限のあるファイアウォールなどで問題がでる。現状では技術デモ以外の目的で使うのは難しそうだ。

AjaxとJavaAppletを使って、1ウィンドウで複数サーバへIRC接続するデモもあるんだけど、IRCプロクシもセットで公開することになるからしばらく裏でコソコソと作ることにする。