ExternalInterface.call () не получает возвращаемое значение - PullRequest
6 голосов
/ 31 марта 2009

У меня есть функция Javascript, которая возвращает innerHTML элемента div. Я пытаюсь вызвать эту функцию из Actionscript и сохранить возвращаемое значение. Я знаю, что вызывается функция Javascript, потому что есть предупреждение, которое отображает возвращаемые данные. Однако данные, возвращаемые в ActionScript, являются нулевыми. Я не уверен, что является причиной этого. Вот пример кода того, что я пытаюсь сделать:

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";
}

Как я уже говорил ранее, предупреждение показывается с содержимым div, но текст в текстовом поле всегда имеет значение «Возвращено нуль», что означает, что ExternalInterface доступен. Я должен добавить, что я могу проверить это только в IE7 и IE8. Любой совет о том, что делать, будет очень ценным.

Ответы [ 7 ]

3 голосов
/ 31 марта 2009

Это рабочий образец на основе предоставленного вами кода. Вы можете щелкнуть правой кнопкой мыши по нему, чтобы просмотреть источник. Я подозреваю, что проблема заключается в HTML для «myDiv» или когда вы выполняете действие actioncript.

2 голосов
/ 31 марта 2009

Источник проблемы, с которой я столкнулся, - это тег объекта, который я использовал для встраивания флэш-фильма. Я использовал тег, который последовал этому примеру http://www.w3schools.com/flash/flash_inhtml.asp, Я изменил его, чтобы соответствовать этому примеру: http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_4150, а затем я убедился, что я добавил id к объекту, и все работает.

0 голосов
/ 02 апреля 2009

Мне кажется, что ваша проблема в том, что из javascript вы возвращаете строку, свойство innerHTML вашего элемента myDiv. В actionScript вы ввели переменную, к которой вызов ExternalInterface возвращает как Object, но это String. Может быть, вы уже поняли это, но я не могу сказать, потому что вы не изменили свой код.

//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");

Надеюсь, это было полезно, позаботься.

0 голосов
/ 31 марта 2009

Попытайтесь получить объект обратно из вызова внешнего интерфейса, не приведя его сначала, и посмотрите на него в отладчике. Если это не строка, попытка привести ее к строке приведет к нулю. Это должна быть строка, но не больно видеть, что вы на самом деле получаете, прежде чем пытаться работать с ней.

0 голосов
/ 31 марта 2009

Я также заметил, что в вашем коде есть опечатка => textField! = Textfield

0 голосов
/ 31 марта 2009

Попробуйте добавить as String к звонку:

textField.text = ExternalInterface.call("JSFunc") as String;
0 голосов
/ 31 марта 2009

Вы должны использовать оператор импорта

import flash.external.*;
...