非dojo環境でXhrIframeProxyをしてみる
http://d.hatena.ne.jp/shinichitomita/20061025/1161776282
の続き。
結局dojoのXhrIframeProxyで参考にすべきところは、fragmentIdentifierを使ってフレーム間でメッセージのやり取りをしているところ。つまり、同梱の xip_server.html とxip_client.htmlが偉いのであって、そこにおいて dojo.* のパッケージが何かしてくれているというわけではない。
そのフレーム間やりとりのプロトコル実装はdojoのを流用して、その値を取り出してオブジェクトとして受け渡すところのスタブとなるオブジェクトはdojoに頼らずこっちで書いてしまってもよい。そうすればクライアントは別にdojoでなくてもつかえるはず。
ということで、非dojoバージョンのXhrIframeRequestを作ってみた。サーバ側はさっきとまったく同じ。
http://stomita.web.fc2.com/xip_test_nodojo.html
Firefox1.5とIE6のみテストしている。たぶんSafariとかに対応するにはもうちょっと手数がいる。
xip_client.html は一行だけdojoに依存した部分を書き換えたものを、xip_client_nodojo.htmlとして使用している。
parent.dojo.io.XhrIframeProxy.receive(xipStateId, xipResponseMessage);
↓
parent.XMLHttpRequestIframeProxy.receive(xipStateId, xipResponseMessage);
利用時はこんな感じで、XMLHttpRequestIframeProxyオブジェクトを使って呼び出す。とりあえずXMLHttpRequestとほぼ同じインターフェースにしてみた。
var req = new XMLHttpRequestIframeProxy( 'xip_client_nodojo.html', // xipClientUrl 'http://www.geocities.jp/stormriders999/xip_server.html' // xipServerUrl ); req.onreadystatechange = function() { if (req.readyState==4 && req.status==200) { renderXML(req.responseXML); } } req.open('GET', 'http://www.geocities.jp/stormriders999/fruits.xml'); req.send(null);