首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ExternalInterface中传递回调

在ExternalInterface中传递回调
EN

Stack Overflow用户
提问于 2010-09-27 17:46:09
回答 2查看 2.8K关注 0票数 0

我想从闪存中调用一个Javascript函数,我可以用ExternalInterface来实现,但是Javascript函数需要一个回调。有没有办法给它一个Flash回调?

我想过这样的事情:

代码语言:javascript
复制
ExternalInterface.addCallback("foo", function(){...});
ExternalInterface.call("theFunction", "foo");

但这是行不通的,因为theFunction会尝试做foo(),而它实际上应该做swfObject.foo()。问题是页面和它的Javascript不在我的控制之下(尽管如果真的需要的话,我可以请求更改)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-28 10:50:17

这与first question in the related questions section密切相关。

按照这个问题的答案,你可以这样做:

代码语言:javascript
复制
ExternalInterface.addCallback("foo", function() { /* ... */ });    // The callback
ExternalInterface.call("theFunction(function() { swfObject.foo(); })");
票数 3
EN

Stack Overflow用户

发布于 2010-09-28 02:53:47

我想你误解了文档。这个实例中的callback只是对闪存中函数的引用,而不是对你所调用的东西的回调。

基本上,您使用.call()从AS调用JS函数;并使用.addCallback()告诉Flash Player应该根据名称调用哪个AS函数。

在您的示例中,theFunction将获得一个参数'foo',这是引用您的匿名as函数的名称。我不确定为什么要像这样传递函数,但如果需要,可以使用以下命令从JavaScript调用它

代码语言:javascript
复制
function theFunction(callback) {
    // .. do something...
    swfObject[callback]();
}

现在,如果您无法控制JS/HTML端,我不确定您是否能做到这一点。不管怎样,我不知道你为什么需要-- JS调用是同步的,就像它们在同一个线程上运行一样,这意味着Flash Player将执行JS代码,然后才返回到Flash Player……你不需要等待执行或其他任何东西。

此外,如果您确实需要在不接触JS /HTML端的情况下控制页面,请记住您可以通过.call注入整个JS代码-它不需要是一个简单的函数调用。您可以从SWF内部创建整个函数。例如,

代码语言:javascript
复制
var js:XML = <script><![CDATA[
    // Javascript code...
]]></script>;
ExternalInterface.call(js);

或者,如果需要返回数据,也不需要回调-只需执行一个简单的调用,如下所示

代码语言:javascript
复制
// JS
function isNumberZero(__num) {
    return __num == 0;
}

// AS
trace ("Is number zero = " + ExternalInterface.call("isNumberZero", 10));

我不确定这是否有帮助。如果不是,最好能有更多关于你到底想要做什么的信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3802638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档