如何使用ExternalInterface调用替换URLLoader调用?

时间:2011-02-10 18:20:08

标签: flash actionscript-3

我们已经获得了一些执行URLRequest调用的代码,这些代码响应速度很慢,因此我希望它能够从页面中提取数据,因为它已经在页面上。

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

我试图用它代替它(动作脚本绝对不是我的强项):

_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 个答案:

答案 0 :(得分:4)

ExternalInterface是一个静态类。所以你不应该创建它的新实例。这是修复:

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

此外,您“调用”的方法可以立即返回String,因此您无需添加回调。只需在Javascript中将XML作为String返回,然后在AS3中将其作为String获取。完整示例:

// 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 :(得分:1)

您不要将ExternalInterface()用作“新”的对象。相反,它是一个带有一些暴露函数的静态类。试试这个:


ExternalInterface.addCallback("some_function_returning_xml", _eventTriggered);

答案 2 :(得分:1)

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函数。