2

swfobject.embedSwf.

この問題に対して提案されているすべての手動の​​回避策には、window オブジェクトから Object 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 ムービーがその Javascript 外部インターフェイスを設定すると、window[id] にアクセスしようとします。これは存在しないため、失敗します。

上記の回避策を適用し、window[id]embedSwf に置き換えられる DOM 要素を入力すると、オブジェクト DOM 要素ではなく div DOM 要素で Flash 固有のメソッドを呼び出そうとしているため、まだ失敗します。

Flash 8 と IE6 以降、この問題が修正されていないのは驚くべきことです。

4

1 に答える 1

2

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

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

フォーム内の SWFの例を次に示します。

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

それを見つけようとする前に要素が存在する限り、それはタイミングの問題です。SWFObject は、domready/onload に SWF を埋め込みます。つまり、SWF がロードされるまで、ExternalInterface を呼び出そうとしないでください。これを行うには、作成中のコードを domready 関数に配置します。

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

SWFObject 2.2 には新しいコールバック機能があり、SWF が埋め込まれたらすぐに関数を呼び出すことができます。Bobby Van der Sluis には、「ソースを表示」できる例があります。SWFObject API ドキュメントには、その使用方法が記載されています。

それが役立つことを願っています

--フィリップ

于 2009-07-01T03:53:37.407 に答える