2009-03-31 16 views
6

Ich habe eine Javascript-Funktion, die das innerHTML eines div zurückgibt. Ich versuche, diese Funktion von Actionscript aufzurufen und den Rückgabewert zu speichern. Ich weiß, dass die JavaScript-Funktion aufgerufen wird, da eine Warnung die Rückgabedaten anzeigt. Die Daten, die an Actionscript zurückgegeben werden, sind jedoch null. Ich bin mir nicht sicher, was das verursacht. Hier ist ein Codebeispiel von dem, was ich zu tun versucht:ExternalInterface.call() bekomme keinen Rückgabewert

Javascript: 
function JSFunc() { 
    var x = document.getElementById("myDiv"); 
    alert(x.innerHTML); 
    return x.innerHTML; 
} 

Actionscript: 
import flash.external.*; 
if (ExternalInterface.available) { 
    var retData:Object = ExternalInterface.call("JSFunc"); 
    if(retData != null) { 
      textField.text = retData.toString(); 
    } else { 
      textField.text = "Returned Null"; 
    } 
} else { 
    textField.text = "External Interface not available"; 
} 

Wie ich bereits sagte, zeigt die Warnung mit dem Inhalt des div, aber der Text in dem Textfeld ist immer „Retour Null“, was bedeutete, dass Das ExternalInterface ist verfügbar. Ich sollte hinzufügen, dass ich das nur in IE7 und IE8 testen kann. Jeder Rat zu was zu tun wäre sehr geschätzt.

Antwort

-1

sollten Sie die Anweisung Import verwenden

import flash.external.*; 
+0

Leider habe ich vergessen zu erwähnen, dass ich das schon gemacht habe. –

0

Versuchen Hinzufügen as String den Aufruf:

textField.text = ExternalInterface.call("JSFunc") as String; 
+0

Gib Typcasting einen Schuss, aber keinen Würfel. –

0

ich auch bemerkt, dass Sie einen Tippfehler in Ihrem Code bekommen => Textfield = Textfeld

+0

Entschuldigung für den Fehler, der Code ist ein Beispiel, was ich nicht benutze. –

+0

Nun, es ist nichts falsch mit diesem Code, es sei denn, ein anderer Teil Ihres Codes ist mit dem Inhalt des Textfelds unordentlich. – Claudio

0

Versuchen Sie, das Objekt von Ihrem Aufruf der externen Schnittstelle zurückzuholen, ohne es zuerst zu übergeben, und sehen Sie es im Debugger an. Wenn es sich nicht um eine Zeichenfolge handelt, führt der Versuch, sie in eine Zeichenfolge umzuwandeln, zu null. Dies sollte eine Zeichenfolge sein, aber es tut nicht weh zu sehen, was Sie tatsächlich zurück bekommen, bevor Sie versuchen, damit zu arbeiten.

+0

Das Objekt ist null, was der Debugger mir sagt. –

3

This is a working sample basierend auf dem von Ihnen bereitgestellten Code. Sie können mit der rechten Maustaste darauf klicken, um die Quelle anzuzeigen. Ich vermute, das Problem liegt im HTML für 'myDiv' oder wenn du den Actionscript-Aufruf machst.

+0

Vielen Dank, dass Sie zeigen, dass der Code selbst nicht das Problem ist. Ich denke, dass das Problem mit dem Objekt-Tag, das ich verwendet habe, um den Film in IE einzubetten, sein könnte. Auch wie ich das Javascript und das div, das du benutzt hast, sehe? –

+0

nm, fand ich das Javascript und div. –

0

Es scheint mir, dass Ihr Problem ist, dass Sie von JavaScript eine Zeichenfolge, die InnerHTML-Eigenschaft Ihres Elements myDiv zurückgeben. In ActionScript haben Sie die Variable typisiert, die der ExternalInterface-Aufruf als Objekt zurückgibt, aber es ist ein String. Vielleicht haben Sie dies bereits bemerkt, aber ich kann es nicht sagen, da Sie Ihren Code nicht geändert haben.

//The following is an Object 
var x = document.getElementById("myDiv"); 

/* 
You are returning the innerHTML property of x, a string, but on the 
flash end your expecting an object in your actionscript. 
*/ 
return x.innerHTML; 

//The following seems incorrect to me. 
var retData:Object = ExternalInterface.call("JSFunc"); 

//Should be 
var retData:String = ExternalInterface.call("JSFunc"); 

Ich hoffe, das war hilfreich, pass auf dich auf.