2011-09-10 80 views
0

我想用JavaScript來運行AS3函數。當我嘗試編譯時,我得到「訪問未定義的屬性」錯誤消息。AS3 - ExternalInterface.addCallback,未定義屬性的訪問

我已經在網上閱讀了一些關於這方面的東西,但我仍然不理解它。我想讓Flash文件一直在收聽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」。當我將addCallback添加到AS時,出現錯誤 – user547794

+0

可以粘貼'pauseMusic'和'song4'功能嗎? – Benny

回答

4

我不知道關於你的應用程序的擴展,但你有你的addCallback函數參數混合起來..

請參閱the doc,第一個參數是要暴露函數的名稱,第二個參數是要觸發的實際內部AS3函數。

所以宣言應可能是這樣的:

ExternalInterface.addCallback( 「song4」,pauseMusic);

(假設你在同一範圍內的功能,您撥打的addCallback)

該聲明將創建您可以將閃存DOM對象調用

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

一個「song4」的方法有後暫停音樂想要一個參數的問題(看起來像你已經使它成爲一個鼠標事件處理程序)。你可能想要一個乾淨的方法,不需要像內部as3事件參數那樣的參數。重寫pauseMusic所以它不需要它(你可能需要創建另一種方法來內部處理的鼠標事件 - 樣的onPause(EVT:MouseEvent)方法,然後調用pauseMusic

編輯:我不知道如果很多人想這樣做,但你也可以完全使用外部接口調用firebug的console.log函數從閃存向Firebug發送消息(這對調試ExternalInterface問題或任何其他閃存問題非常有幫助 - 請參閱ExternalInterface.call功能)

+0

謝謝Ben,這很有道理。我仍然比較陌生,因爲我努力學習。我切換參數,現在我得到相同的出口錯誤。我修改了新的暫停/外部代碼。如果我只想要此功能來偵聽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");