IE:jQueryの.html()でobject要素を書き出すとExternalInterface.callで戻り値が取得できない
タイトルで殆ど説明してしまってますが、たとえば特定のdiv要素の中に動的にobject要素を追加してFlashを読み込み、そのFlashの中で ExternalInterface.callを使って、JavaScriptの関数を呼び出しつつ戻り値を取得して、それをFlashの挙動に反映させるようなものを作ってたのですが、IE(6と7で確認)の場合のみJavaScriptの戻り値が取得できませんでした。 で、色々試してる中で、jQueryの関数を使わずにdocument.writeすればIEでも正常に動作することは突き止めましたが、document.writeはページロード完了後に呼び出すと、その出力内容でページを書き換えてしまうため、回避方法がそれしかないとするととても不便です。 さらに色々試してみると、どうもjQueryのhtml関数が悪さをしてるようで、例えば $(‘Flashのガワになるdiv’).html(‘Flashを読み込むobject要素のhtml’); みたいに書いてた部分を $(‘Flashのガワになるdiv’).get(0).innerHTML = (‘Flashを読み込むobject要素のhtml’); と書き換えたらうまくいきました。 jQueryとExternalInterfaceを同時に使うときは注意です。 しかし、html()で内部でinnerHTML使ってるだけだと思ってたんですけど、ちょっと違うようですね。innerHTMLの前に正規化処理でもあって、それが悪影響を及ぼしてるのかも知れません。 実は以前、IEだけでExternalInterface.addCallBackがうまく動作しない問題もあったのですが、今回の方法でそちらもうまく動作するかもしれません。
Read the rest of this entry »