2009-06-29 13 views
8

Czy można wysłać tablicę z Flasha (AS3) do JavaScript za pomocą wywołania ExternalInterface?Wysyłaj tablicę z Flasha (AS3) do JavaScriptu

Obecnie wywołuję funkcję wiele razy z pętli "dla każdego" wewnątrz Flasha, ale dzieje się to za szybko, aby JavaScript mógł nadążyć.

Mój pomysł polega na utworzeniu tablicy atrybutów, przekazaniu jej do funkcji JavaScript, a następnie przejściu do niej w JavaScript.

Dzięki Josh

+1

Wystarczy znaleźć ten, który być może przyczyną moich problemów http://www.scottgmorgan.com /blog/index.php/tag/externalinterface/ Ciągle interesuje się tablicą, jeśli to możliwe. – Josh

Odpowiedz

7

Oprócz sugestii użycia JSON, powinno to być szybsze dla małych tablic i nie wymagałoby użycia eval ani zewnętrznej biblioteki do parsowania. Dołącz tablicę w ciąg tak lampa błyskowa:

item1 | ITEM2 | ITEM3 | ITEM4

Przepuścić ciąg do JS i podzielić go ponownie za pomocą split ("|")

+0

fajny pomysł - dzięki. – Josh

+5

Upewnij się, że twoje dane nigdy nie będą zawierały znaków separatora! – singpolyma

6

Zawsze możesz utworzyć obiekt JSON i przekazać, że do JavaScript.

+1

JSON ma się dobrze i jest wiele bibliotek, których można używać zarówno w Actionscript, jak i Javascript. Jednak w tym przypadku odtwarzacz obsługuje serializację, więc używałbym rodzimych obiektów AS. Jest to prostsze, już dostępne na półce i prawdopodobnie szybsze. –

+0

podczas odbierania obiektu Json, w jaki sposób przechowywać go w pamięci flash w ciągu znaków? –

8

Tak, to możliwy.

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

... arguments - Argumenty przekazać do funkcji w pojemniku. Użytkownik może określić zero lub więcej parametrów, , oddzielając je przecinkami. Mogą być one dowolnego typu w ActionScript. Gdy wywołanie jest do funkcji JavaScript, , typy ActionScript są automatycznie przekształcane w typy JavaScript; gdy wywołanie jest do jakiś inny kontener ActiveX, parametry są zakodowane w wiadomości żądania .

Szybki test:

jako kod:

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

kod JS:

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