【備忘録】Flash-ExternalInterfaceがIEでエラー

ハマったので、備忘録。

Flashをdocument.writeじゃなくてinnerHTMLでインサートする場合に、
ExternalInterface.addCallbackを使ってJS→ASをしようとすると、
IEで「オブジェクトでサポートされていないプロパティ...」ってエラーが返ってきます。

最初はobjectタグとembedのとIDの重複やら、プロパティやらを疑って色々やってみるも不発。
でも通常のサンプルは動くみたいなので、原因を追求していく。
で、限定された部分がdocument.writeかinnerHTMLか。

"externalInterface innerHTML"でググって、答え発見。

下記を参照しました。



jiroの日記 ■[ActionScript][JavaScript]ExternalInterfaceのまとめ


スクリプトで動的に要素を追加する場合には注意が必要
例えばobjectタグのコンテナであるdivタグを生成した直後にobjectタグを追加すると動作しない

divタグを生成して、DOMツリーに登録されてから処理しないといけない

例えば下のようなかんじでinnerHTMLへの代入は遅延させなければいけない。ちなみにsetTimeoutすれば、必ずbodyにdivタグが追加されたあとにinnerHTMLが実行される


前にもinnerHTMLでスクリプト動かないので悩んだので、これでスッキリしました。
sukesamさん、ありがとうございます!

最近DOMDOMDOMDOMしてるけど、ブラウザ毎の判別やら対処がめんどくせえっす。
統一しておくれ(;´_ゝ`)