1

正如您可以通過標題所知道的,我在AS3 ExternalInterface和jQuery/swfobject中遇到了一些問題。jQuery swfobject AS3 ExternalInterface不工作

的ActionScript:

if (ExternalInterface.available) { 
    ExternalInterface.call('init'); 
    ExternalInterface.addCallback('testFunc', returnFunc) 
} 

function returnFunc():void { 
    ExternalInterface.call('alertFunc'); 
} 

的jQuery:

function init() { 
    alert('init'); 
    $('#swf_object').testFunc(); 
} 

function alertFunc() { 
    alert('finished'); 
} 

顯然,這意味着該對象的ID爲 'swf_object'

我也曾嘗試通過以下獲取對象:

document.getElementById('swf_object') 
document.getElementById('swf_object')[0] 
$('#swf_object')[0] 

無濟於事。

它給出了第一個警報('init'),但沒有做最後一個。我完全困惑,希望有人能指出我的錯誤! (有必然是地方大規模明顯的一個)

回答

2

的問題是,你呼喚JavaScript的init()它調用閃存testFunc()你做testFunc提供之前(後只發生呼叫到init()完成)。

爲了解決這個問題,只需將兩行交換到這一點:

ExternalInterface.addCallback('testFunc', returnFunc); // Needs to be available before it's used 
ExternalInterface.call('init'); 

至於讓JavaScript中的Flash對象,你可以直接與document.getElementById('swf_object')做到這一點,但它可能使用jQuery太:

var swf = $('#swf_object').get(0); // Get the actual object without the jQuery wrapper 
+0

我知道這將是簡單的事情!我對ActionScript非常陌生,但那是非常明顯的!我曾期待ActionScript繼續閱讀代碼(如JavaScript),但事實證明它等待函數(如PHP)。我記得當我學習JavaScript時遇到了相反的問題,期待它等待函數的執行! – 2012-01-14 22:53:45

+1

@Andrew:AS3和JS(在瀏覽器中)在這方面實際上非常相似 - 都在單線程環境中託管,因此大量使用異步函數。但是,無論何時你調用一個函數,它都是一個同步操作(在我所能想到的所有語言中)。協調這兩個概念的訣竅是啓動異步操作*的函數將運行同步操作* - 它不會立即執行整個操作(只是第一個位)。 – Cameron 2012-01-14 23:00:58