2011-09-10 24 views
0

JavaScriptを使用してAS3関数を実行しようとしています。私がコンパイルしようとすると、 "未定義のプロパティのアクセス"エラーメッセージが表示されます。AS3 - ExternalInterface.addCallback、未定義のプロパティへのアクセス

私はこれについてオンラインでいくつかのことを読んだが、まだ理解していない。私はフラッシュファイルを常にjavascriptを聞いてもらいたい。ここで

は私のAS3コードです:

ExternalInterface.addCallback("song4", PauseMusicExt); 

そして、私のJavascriptを& HTML:

function returnVar3(song3) { return this[song3]; } 
    <input type="submit" name="playButton" id="playButton" value="Submit" onClick="returnVar('song3')"/> 

編集:ここではpauseMusic機能である:

function pauseMusicExt():void 
    { 
     songPosition = channel.position; 
     channelSilence.stop(); 
     channel.stop(); 
     channel2.stop(); 
     btnPlay.mouseEnabled = true; 
    } 
+0

あなたが何をしたいですか? – Benny

+0

HTMLボタンがクリックされたときにjavascript関数returnVar3からAS関数 "pauseMusic"を実行できるようにします。 Wheeven私はaddCallbackをASに追加します。エラーが発生します。 – user547794

+0

'pauseMusic'と' song4'関数を貼り付けることができますか? – Benny

答えて

4

私はわからないんだけどあなたのアプリの拡張については、addCallback関数のパラメータが混在している。

the docを参照してください。最初のパラメータは、javascriptの機能を公開する名前です。第2のパラメータは、トリガーする実際の内部AS3関数です。

そう宣言はおそらくのようなものでなければなりません:

ExternalInterface.addCallback( "song4"、pauseMusic)。

(あなたがaddCallbackを呼ぶところと同じ範囲でそのあなたの関数と仮定)

ステートメントがあります後、あなたのフラッシュDOMオブジェクト

var fl = document.getElementById('myflashobject'); 
fl.song4() 

に呼び出すことができる「song4」メソッドを作成することpauseMusicがパラメータを必要とする問題(あなたがマウスイベントハンドラにしたように見えます)。おそらく、内部のas3イベント・パラメーターのようなパラメーターを必要としないクリーンなメソッドが必要な場合があります。書き換えpauseMusicあなたが内部でマウスイベントを処理するための別の方法を作成する必要があります(それはそれを必要としないので - onPause(EVTのように:。その後、pauseMusicを呼び出したMouseEvent)、

編集:私は知りませんFirebugのconsole.log関数を呼び出してFirebugにフラッシュからメッセージを送信することもできます(ExternalInterfaceの問題やその他のフラッシュの問題のデバッグには本当に便利です)。ExternalInterface.callを参照してください機能)uは、オーディオプレーヤーを一時停止する

+0

感謝のベン、それは多くの意味があります。私はまだ私が行くように学習しようとするには比較的新しいです。私はパラメータを切り替えましたが、今はエクスポート時に同じエラーが発生しています。新しい一時停止/外部コードで改訂しました。この関数がjavascriptをリスンするだけの場合は、どのパラメータを渡しますか? – user547794

+0

ExternalInterfaceが関数の内部にないので、これが起こっていますか? – user547794

+0

@ user547794私は確信していません、私はあなたのプロジェクトの残りの部分を本当に知っていません。私は単純な外部インターフェイスを使ってテストプロジェクトを行い、それを動作させることをお勧めします - JSをフラッシュテキストフィールドなどに渡した文字列を出力するものかもしれません。それはあなたのより大きい規模の問題にまで及ぶ。 – Ben

0

ホープ・コードAS

ExternalInterface.addCallback("sndToAS",rcvdFmJS); 
    function rcvdFmJS(val){ 
     if (val == "pause"){ 
     audioPause(); 
     } 
    } 

JSコード:

document.getElementById("movie").sndToAS("pause");  
関連する問題