2009-06-29 193 views
8

是否可以使用ExternalInterface調用將數組從Flash(AS3)發送到JavaScript?從Flash(AS3)發送數組到JavaScript

我目前正在從Flash中的'for each'循環多次調用一個函數,但它太快了,以至於JavaScript不能跟上。

我的想法是創建一個屬性數組,將其傳遞給JavaScript函數,然後循環遍歷JavaScript中的數據。

感謝, 喬希

+1

剛剛發現這裏面可能導致我的問題http://www.scottgmorgan.com /blog/index.php/tag/externalinterface/ 儘管可能,仍然對數組感興趣。 – Josh 2009-06-29 14:24:04

回答

7

除了使用JSON的建議之外,對於小型數組,這應該更快,並且不需要使用eval或外部庫進行分析。在Flash加入一個字符串數組是這樣的:

物品1 | ITEM2 |項目3 | ITEM4

傳遞字符串給JS和分裂再次採用分體式(「|」)

6

你總是可以創建一個JSON對象並將其傳遞給JavaScript。

+1

JSON很好,有很多庫可以在Actionscript和Javascript上使用。但在這種情況下,玩家會爲您處理序列化,所以我只會使用本機AS對象。它更簡單,現成可用,速度可能更快。 – 2009-06-30 02:01:59

+0

在接收json對象時如何將它存儲在字符串中的flash中? – 2010-01-20 14:05:03

8

是的,這是可能。

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/external/ExternalInterface.html#call()

...參數 - 的參數傳遞 在容器中的函數。您可以指定零個或多個參數, 用逗號分隔它們。它們可以是任何ActionScript數據類型的 。當 調用的是JavaScript函數 時,ActionScript類型爲 自動轉換爲 JavaScript類型;當呼叫到 某個其他ActiveX容器時, 參數被編碼在請求 消息中。

簡單的測試:

AS代碼:

if(ExternalInterface.available) { 
    ExternalInterface.call("jsTest", [0,1,"two",{a:1,b:2}]); 
} 

JS代碼:

function jsTest(arg) { 
    alert(arg); 
}