2012-08-10 35 views
0

我知道這個話題已經有很多問題了,但是他們都沒有解決我的問題,也許我只是錯過了一些東西。當試圖發送var到AS3時,Javascript會引發錯誤ExternalInterface

無論如何,這裏是交易。我有一個快樂的小html5遊戲,播放一些音頻和聲音的影響等,它在每個支持html5的瀏覽器中都很棒。但是,那些不需要閃回的人。沒什麼大不了的?顯然不是......我做了一個小的swf,應該接受來自JS的mp3 url,然後獲取mp3並播放它。我必須使用這種方式,因爲有很多音頻文件,我想嘗試避免爲每個文件製作一個swf文件。

這是AS - 我使用ExternalInterface從js接收變量。

import flash.external.*; 

ExternalInterface.addCallback("callFlash", playSound); 

function playSound(file:String):void { 
    var s:Sound = new Sound(); 
    s.load(new URLRequest(file)); 

    s.play(); 
} 

然後我的JS傳遞變量:

var flash = $('#fbplayer')[0]; 
console.log(flash); //returns flash object so jquery is not the issue 
flash.callFlash(fallSource); 

所以理論上應當一切正常(如果我理解正確的ExternalInterface)。但是,拋出以下錯誤:

TypeError: flash.callFlash is not a function 
flash.callFlash(fallSource); 

我似乎無法找到問題所在。 我願意接受任何答案,甚至完全不同的方式。 只要它工作,因爲這是舉辦項目交付:C

謝謝!

+0

頁面上是否有超過1個flash對象?我問這個:[var flash = $('#fbplayer')[0];' – 2012-08-10 22:46:26

+0

頁面上只有一個flash對象,但使用[0],以便jQuery不返回jQuery對象 - [0]迫使jQuery採取對象。據我所知至少... – mattelliottIT 2012-08-10 23:27:06

+0

跳出(除了通常的'allowScriptAccess'嵌入參數)唯一的其他事情是,也許JS在執行'ExternalInterface.addCallback()'之前調用Flash函數。 – 2012-08-11 00:18:21

回答

1

我知道這真的很舊,但我從來沒有成功地用jQuery找到我的Flash對象。使用getElementById最好。另外,幾個月前我碰到一些現代瀏覽器的另一件瘋狂事情是,我實際上需要告訴Flash在通過ExternalInterface初始化任何回調之後等待一幀。