2011-10-26 103 views
1

我想從我的JavaScript中調用ActionScript中的函數,我已經成功地用另一個Flash文件做到這一點,但在當前的一個由於某種原因失敗。我使用jQuery SWFEmbed,這是我的JS代碼:ExternalInterface回調不起作用

$.ajax({ 
     url: '<?php echo $html->url(array('controller' => 'voicenotes', 'action' => 'get_url'), true);?>' + '/' + container.children('#VoicenoteVnid').val(), 
     dataType: 'json', 
     type: 'POST', 
     success: function(response) { 
      container.children('.voicenote-info').children('.player').addClass('active'); 
      flashMovie = container.children('.voicenote-info').children('.player'); 
      alert(flashMovie.html()); 
      flashMovie.flash({ 
      swf: '<?php echo $html->url('/files/flash/reproductor_compact.swf',true); ?>', 
      width: 240, 
      height: 40, 
      quality: "high", 
      wmode: "transparent", 
      allowscriptaccess: "always", 
      }); 
      alert($('.player.active > object')[0].callIt()); 
     }    
     }); 

這裏是我的AS代碼,這是我的構造函數:

public function reproductor() 
     { 
      ExternalInterface.addCallback("callIt", test); 
      ExternalInterface.call("alert", "Que fue?"); 
      trace(ExternalInterface.available); 
     } 

這是我的函數:

private function test():String { 
      return "this is a test"; 
     } 

ExternalInterface.call工作,跟蹤輸出爲真,我不知道發生了什麼。

P.S:如果您還可以告訴我如何將參數傳遞給ExternalInterface回調,我會很感激。

+0

以下[堆棧溢出答案](http://stackoverflow.com/questions/7657842/how-to-call-flash-actionscript-callback-method-from-javascript/7657994# 7657994)可能包含導致您的具體問題。 –

回答

2
  1. 也許你的JQuery選擇器找到你的SWF對象是錯誤的。你爲什麼不嘗試以另一種方式做 ,只是爲了調試?
  2. 也許你在SWF完全加載之前調用了你的AS3函數。你爲什麼不嘗試將該函數調用(callIt)放入一個按鈕,在Ajax外部,並在你的警報被調用後按下它?

要接收PARAM你的回調函數中,僅僅通過JS發送,並接受它作爲你的回調函數的參數。 例:

$('.player.active > object')[0].callIt("LOLSOME") 

... 

ExternalInterface.addCallback("callIt", test); 
private function test(arg:String):String { 
     return "param received from JS: " + arg; 
} 
+0

是的,這聽起來像是問題所在。在你可以在你的SWF上從JS調用一個函數之前,需要實例化SWF,並且它的代碼塊'ExternalInterface.addCallback'方法需要執行。如果你希望儘快調用JS方法,只要在SWF中執行'addCallback',就可以從Flash向JS發出一個方法,因爲DOM是Flash的開放遊戲,與Flash進行交互只要在Embed中啓用了allowScriptAccess – gthmb

+0

這就是問題所在,謝謝Marcelo,現在的交易是這種方法是將URL加載到我想播放的.mp3文件(這是一個音頻播放器)我試着簡單地使用flashvars工作正常,但如果我在播放下一個文件時播放一個文件,它只是從緩存中獲取播放器,並播放我播放的第一個文件,因此是ExternalInterface調用。所以你有一個想法,我的網站有一個voicenotes流,每當我點擊播放一個球員實例化它。 – 8vius

+0

@ 8vius,爲什麼不解釋你的問題更好?我沒有得到它。 你只需要有一個方法來調用你的歌曲,並通過JS調用它們,使用param來選擇它們。優先使用一個SWF。 –