2009-03-24 14 views
2

JavaScriptを介してクライアント側から呼び出されるAS3で定義された関数があります。 AS3関数は、呼び出されたときにSWF画面に値を単に出力します。ページ上のFlash外部インターフェイスAS3関数の呼び出し

ボタンにonclickイベントハンドラを設定してAS3関数を呼び出すとうまく動作します。しかし、私はこのAS3関数を、ページがロードされるとすぐに呼びたいと思っています。私は、プロジェクトでのjQueryを使用していると私は$(ドキュメント).ready()内AS3関数の呼び出しを置き、それは私にFF2の放火犯に次のエラー得られます。

getFlashMovie(「my_movie_name」)をmy_as3_functionがあります関数ではない

次に、でonLoadイベントハンドラを設定してみましたが、これもうまくいかず、同じエラーが発生します。

私の質問は、ページが読み込まれると自動的にAS3関数を呼び出す方法です。私のプロジェクトでは、一旦ページが読み込まれると、クライアントサイドの初期化情報をフラッシュに渡す必要があります。

答えて

9

フラッシュが読み込まれ、初期化されたことを通知するために、フラッシュをページ内に呼び出す必要があります。次に、そのポイントをエントリポイントとして使用します。フラッシュで

ExternalInterface.call('flashReady'); 

ページでは:

<script> 
function flashReady() { 
    .. 
} 
</script> 
+0

このJavaからフラッシュを呼び出すために使用するコードは何ですか? –

0

問題は、ページの読み込みが完了してもFlashオブジェクトがまだ初期化されていないことです。おそらくAS3内からこの初期化を実行するほうがはるかに安全です。 HTMLページから値を渡す場合は、flashVarsを使用します。

0

私は数週間前、この問題は自分自身に走りました。ソリューションは:)

まず非常に簡単です、あなたはDOMにあなたはまた、あなたの負荷を時間を計るためにjQuery Timers pluginを使うことになるのdiv

<div id="timewriter"><div> 

を配置する必要があります。この準備の後、物事は非常に簡単になります。 次のコードは$(document).ready()に入ります。

var movie = getFlashMovie('my_movie_name'); 

if(movie.PercentLoaded() != 100) 
{ 
    $("#timewriter").everyTime(100, function() 
    { 
     if(movie.PercentLoaded() == 100) 
     { 

      $("#timewriter").stopTime(); 
      //the movie is loaded, call here your functions; usually this happens if you don't use cache 

     } 
    }); 
} 
else 
{ 
    //the movie is loaded, call here your functions; usually you get here if you use cache 
} 

その後編集:右のWebページのロードcompleteイベント後に起こること、HTMLページの読み込みがswfファイルがロードされたという意味ではありませんので注意してください。また、私の解決策は、jQueryのjavascriptライブラリに基づいています。

0

回答の集まりが最も近いこの回答に近いようです。

デイビッド・ハナック(David Hanak)は、初期化中であるため、フラッシュオブジェクトにアクセスすることはできませんが、私はフラッシュバーに頼らなければならないとは思っています。

Tweaktは正しいですが、javascriptで関数を呼び出すと、swfを呼び出すjavascript関数が呼び出されます。この方法で、フラッシュが最初の呼び出しを送信したときに準備ができていることがわかります。

2

あなたは(おそらく良いアイデアとにかく)あなたのSWFを埋め込むことswfObjectを使用している場合、あなたはSWFが完全に両方で

swfobject.addDomLoadEvent(function() { 
    $("#swfobject").get(0).inited('you are loaded!'); 
}); 
+0

私はaddLoadEvent()がより正しいと思います。 addDomLoadEvent()は、DOMがロードされてからイメージ、CSS、およびFlashオブジェクトがロードされる前に起動します。私はこれを確認するためのテストをしました。 – dan

+0

あなたはそのような命の恩人です! –

0

回答をロードされると、あなたが何かをすることができますそのaddDomLoadEvent()関数を使用することができますtweaktとBogdanは実行可能です。あなたがActionscriptへのアクセス権を持っているなら、tweaktの方法を使用してください。あなたがしなければBogdanのを使用してください。私はポーリングの他に(あなたがActionscriptへのアクセス権を持っていないときに)代替案を探していましたが、今までのところ見つけられませんでした。イベントはここに記載されています:http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.htmlしかし、誰もそれらを使用する方法を知っているようです。

1

ここで賢明にしようとはしていませんが、サーバーで作業をテストしていますか?

外部インタフェース、addcallback線量ローカルファイルシステム上で動作し、最終的にあなたが追加する必要がありません。

flash.system.Security.allowDomain(「http://localhost」);

ローカルで実行している場合。

:完了さのためにP

+0

良い観察。 – nottinhill

0

は、あなたはまた、すべての仕事をするためにimport flash.external.*;を使用する必要があります。

関連する問題