2009-07-01 3 views
2

私は、swfobject.embedSwfを使用してIE 6,7,8内のHTMLフォームに動的に読み込まれたSWFを埋め込むことに無限の問題がありました。swfobject 2+をIE6 +で使用してフォームにSWFを埋め込むことはできますか?

問題の提案されたすべての回避策には、ウィンドウオブジェクトからのオブジェクトDOM要素への参照の作成が含まれます。例:

window[id] = document.getElementById(id); 

ここで、idはswfオブジェクトのdom要素のIDです。私の場合、まだ作成されていないので、window[id]をswfオブジェクトIDに設定することはできません!

javascriptのエラーを引き起こしているswfobjectの行は次のとおりです。

el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>'; 

SWFムービーは、それがウィンドウ[ID]をアクセスしようとしたそのJavascriptの外部インターフェイスを設定したよう。これは存在しないので失敗します。

window[id]をembedSwfに置き換えられているDOM要素に埋め込むと、オブジェクトDOM要素ではなくDOM固有の要素にFlash固有のメソッドを呼び出そうとしています。

私は、この問題がFlash 8とIE6以降に修正されていないことを驚かせています!

答えて

2

どこに問題があるのか​​わかりません。 ExternalInterfaceとSWFObjectはIE6/7/8で動作します。このexampleを参照してください(例の説明はhereです)

「swfをフォームに埋め込む」と言うと、正確に何をしようとしていますか? swfをdivに埋め込んでいる場合は、そのdivがフォーム内にあるかどうかは関係ありません。

はここウィンドウ[ID]のようexample of a SWF in a form

だ、それは推奨アプローチだとのdocument.getElementById(ID)に置き換えなければなりません。古いFlashチュートリアル/ドキュメントの多くは、ExternalInterfaceを操作する際にwindow [id]を使用すると言われていますが、すべての主要ブラウザがW3C標準のdocument.getElementbyIdをサポートしているので無視しても安全です。これにはIE6/7/8、Firefox、Safari/Webkit、Operaなどが含まれます。

これまで見つかっていた要素はタイミングの問題です。 SWFObjectはSWFをdomready/onloadに埋め込みます。つまり、SWFが読み込まれるまでExternalInterfaceを呼び出さないでください。あなたはdomready機能に書いているものは何でもコードに配置することによってこれを行うことができます。

swfobject.addDomLoadEvent(function(){ 
    //safe to execute code on your embedded SWF in here 
}); 

SWFObject 2.2あなたは、すぐにSWFが埋め込まれているとしての機能を呼び出すことができます新しいコールバック機能を備えています。ボビー・ファン・デル・スルースはexample you can 'view source' onです。 SWFObject API documentationはその使用方法をカバーしています。

--philip

を助け

希望

関連する問題