我想从Flash调用Javascript函数,我可以使用ExternalInterface
,但Javascript函数需要回调。有没有办法给它一个Flash回调?
我想到过这样的事情:
ExternalInterface.addCallback("foo", function(){...});
ExternalInterface.call("theFunction", "foo");
但是,由于theFunction
尝试执行foo()
,这不会有效,而它应该swfObject.foo()
。问题是页面及其Javascript不在我的控制范围内(尽管如果真的需要我可以请求更改)。
答案 0 :(得分:3)
这与first question in the related questions section密切相关。
与问题的答案一样,你可以这样做:
ExternalInterface.addCallback("foo", function() { /* ... */ }); // The callback
ExternalInterface.call("theFunction(function() { swfObject.foo(); })");
答案 1 :(得分:1)
我认为你误解了这些文档。在这个例子中,callback
只是对Flash内部函数的引用,而不是对您调用的函数的回调。
基本上,您使用.call()
从AS调用JS函数;并使用.addCallback()
告诉Flash Player应根据名称调用哪个AS函数。
在您的示例中,theFunction
将获得一个参数为'foo',这是引用您的匿名AS函数的名称。不知道为什么你想要传递这样的功能,但如果你需要,你可以用JavaScript调用它
function theFunction(callback) {
// .. do something...
swfObject[callback]();
}
现在,如果您无法控制JS / HTML方面,我不确定您是否可以这样做。不知道为什么你需要,无论如何 - JS调用是同步的,就像它们在同一个线程上运行一样,这意味着Flash Player将执行JS代码,然后才返回Flash Player ......你没有等待执行或任何事情。
另外,如果确实需要在不触及JS / HTML方面的情况下控制页面,请记住您可以通过.call
注入整个JS代码 - 它不需要是一个简单的函数调用。您可以从SWF内部创建整个功能。例如,
var js:XML = <script><![CDATA[
// Javascript code...
]]></script>;
ExternalInterface.call(js);
或者,如果您需要 return 数据,您也不需要回调 - 只需执行简单的调用,如
// JS
function isNumberZero(__num) {
return __num == 0;
}
// AS
trace ("Is number zero = " + ExternalInterface.call("isNumberZero", 10));
不确定这是否有帮助。如果没有,那么获得有关您正在尝试做什么的更多信息会很好。