Как заменить вызов URLLoader на вызов ExternalInterface? - PullRequest
0 голосов
/ 10 февраля 2011

Нам дали код, который делает URLRequest вызов, который очень медленно отвечает, поэтому я пытался заставить его извлечь данные со страницы, как это уже есть на странице.

//what we have
_dataLoader = new URLLoader();
_dataLoader.addEventListener(Event.COMPLETE, _eventTriggered);
_dataLoader.load(new URLRequest("http://somesite.com/xmlstuff.xml"));

Я попытался заменить его следующим (actionScript определенно не моя сильная сторона):

_dataLoader = new ExternalInterface();
_dataLoader.addCallback(_eventTriggered);
_dataLoader.call('some_function_returning_xml');

Я использую addCallBack, так как это то, что редактор предложил через автозаполнение, к сожалению, это не работает. К сожалению, сейчас я не могу вернуться к разработчику.

Сообщение об ошибке:

Call to a possibly undefined method addCallback through a reference with static type flash.external:ExternalInterface

Ответы [ 3 ]

4 голосов
/ 10 февраля 2011

ExternalInterface является статическим классом.Таким образом, вы не должны создавать новый экземпляр этого.Вот исправление:

ExternalInterface.addCallback(_eventTriggered);
ExternalInterface.call('some_function_returning_xml');

Кроме того, метод, который вы «вызываете», может немедленно вернуть строку назад, поэтому вам не нужно добавлять обратный вызов.Просто верните XML как строку в Javascript, и вы получите его как строку в AS3.Полный пример:

// JS
function some_function_returning_xml(){ return "<result>Sweet</result>"; }

// AS3
var xmlStr:String = ExternalInterface.call('some_function_returning_xml');
var xmlData:XML = new XML(xmlStr);

ExternalInterface Документы: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html

Наслаждайтесь!

1 голос
/ 10 февраля 2011

ExternalInterface - это класс, который позволяет вызывать функции в содержащей среде, и, как указано в других ответах, это статический класс.

Вы, вероятно, хотите что-то вроде этого:

if(ExternalInterface.available)
{
    ExternalInterface.call("your_javascript_function_name");
}

Или, если вы даже можете внедрить функцию javascript и выполнить ее немедленно, записав javascript в строку:

if(ExternalInterface.available)
{
    ExternalInterface.call("function(){alert('it works!');};");
}

Метод ExternalInterface.addCallback позволяет вам представить функцию ActionScript для содержащей ее среды, чтобы можно было использовать функции JavaScript для вызова функций ActionScript.

1 голос
/ 10 февраля 2011

Вы не используете ExternalInterface () как объект, который вы «новый». Вместо этого это статический класс с некоторыми открытыми функциями. Попробуйте это:


ExternalInterface.addCallback("some_function_returning_xml", _eventTriggered);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...