A Day in the Life

JSONP が Opera だと非同期処理できない

先日のエントリー、MochiKit で JSONP の利用の AysncJSONP.js を拡張して、リクエスト先が重くて開けなかったり、シンタックスエラーで読み込みに失敗した時用に、タイムアウトのエラー処理を追加しようとしたときに気づきました。
Opera では element.appendChild(script) による、スクリプト要素の動的追加では、追加完了までその場で実行処理が止まっています。そのため、

document.getElementsByTagName('head')[0].appendChild(script);
alert('example');

という処理の場合、追加するスクリプト要素のソース先のサーバが重くて、結果を返すのに10秒かかかったら alert が実行されるのが10秒後となってしまいます。WinIE や FireFox の場合は、スクリプト要素は非同期で追加されるため、スムーズに処理ができるのですが、Opera だとそれができません。
そのため Opera では非同期で JSONP で読みこまれた順から処理を…、といったことができないです。うまい解決方法とか無いのかなぁ…。

記事の一覧 >