Flash/AS3 Objekt an JS übergeben - ExternalInterface.call
Fred
- sonstiges
0 Fred
Hallo liebes Forum!
Nach ergebnisloser Suche nach einer Lösung zu meinem Problem, hoffe ich nun, dass mir hier geholfen werden kann.
Ich möchte aus einer SWF-Datei eine JavaScript-Funktion aufrufen und ihr ein Argument, in meinem Fall ein Objekt, übergeben.
Leider bekomme ich nur ein leeres Objekt und eine Meldung der Fehlerkonsole des Firefox die ich nicht interpretieren kann.
Zunächst meine JS-Test-Funktion:
function jsTest(obj)
{
alert(typeof obj);
for (s in obj)
{
alert(s);
}
}
Dann erstelle ich mir in ActionScript ein Objekt das ich an diese Funktion schicken will:
var testArray:Array = new Array();
// test mit String
testArray['test1'] = 'test1';
// test mit primitivem Objekt
testArray['test2'] = {foo:'bar', bla:'blub'};
// test mit verschachtelten "Arrays"
testArray['test3'] = new Array();
testArray['test3']['foo'] = new Array()
testArray['test3']['foo']['bar'] = 'foobar';
/*******************************************
* das ergibt in ActionScript
*******************************************
* testArray(object) {
* // Test 1
* test1(string) -> "test1"
*
* // Test 2
* test2(object) {
* foo(string) -> "bar"
* bla(string) -> "blub"
* }
*
* // Test 3
* test3(object) {
* foo(object) {
* bar(string) -> "foobar"
* }
* }
* }
*******************************************/
/*
* Objekt an JS übergeben
*/
if (ExternalInterface.available)
{
ExternalInterface.call('jsTest', testArray);
}
Die Fehlerkonsole des Firefox gibt mir folgende Meldung:
Fehler: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMEventTarget.removeEventListener]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: file:///C:/******************/Mozilla/Firefox/Profiles/na3bnfci.default/extensions/%7Bd10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d%7D/modules/ObjectTabs.jsm :: anonymous :: line 343" data: no]
Quelldatei: file:///C://******************/Mozilla/Firefox/Profiles/na3bnfci.default/extensions/%7Bd10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d%7D/modules/ObjectTabs.jsm
Zeile: 343
Meine JavaScript-Funktion gibt mir als alert nur "object". Es scheint sich also um ein leeres Objekt zu handeln.
Ich konnte das Problem auf den 3. Test eingrenzen.
Mein Versuch war
if (ExternalInterface.available)
{
ExternalInterface.call('jsTest', testArray['test1'], testArray['test2'], testArray['test3']);
}
Die Werte in testArray['test1'] und testArray['test2'] konnte ich in JS problemlos ansprechen. testArray['test3'] liefert wieder das leere Object und die Meldung in der FF-Fehlerkonsole.
Wie kann ich ein verschachteltes Array/Objekt von AS3 an JS übergeben?
Kann mir jemand dabei helfen?
Danke! Fred
Ok, wenn man die Objekte auch als Objekte deklariert funktioniert es fast fehlerfrei:
var testArray:Array = new Object();
// test mit String
testArray['test1'] = 'test1';
// test mit primitivem Objekt
testArray['test2'] = {foo:'bar', bla:'blub'};
// test mit verschachtelten "Arrays"
testArray['test3'] = new Object();
testArray['test3']['foo'] = new Object()
testArray['test3']['foo']['bar'] = 'foobar';
"Fast" deshalb, weil die Fehlerkonsole immernoch diesen merkwürdigen Fehler anzeigt.
Weiß da jemand Rat?
Fred