gpt4 book ai didi

javascript - 从 Javascript 调用 Flex/AS3 回调

转载 作者:行者123 更新时间:2023-11-29 20:25:22 25 4
gpt4 key购买 nike

我有一个 Javascript API,应该可以与 GWT 和 Flex 一起使用。使用 FABridge 从 AS3 调用 Javascript 方法真的很容易,反之亦然。但是,当我尝试在我的 Javascript API 中注册对 AS3 方法的回调时,我遇到了困难。这是一个简短的代码示例:

public function initApp():void {
if (ExternalInterface.available) {
ExternalInterface.addCallback("foobar", foobar);
}
}

public function foobar():void {
//the callback function
Alert.show("Callback from API works!");
}

private function btnCallbackClicked():void {
ExternalInterface.call("testAPICallbackFromJS", Application.application.foobar);
}

和简单的JS方法:

function testAPICallbackFromGWT(callback){
$clinit_26(); //added by the GWT compiler
alert('callback to be launched 3 2 1');
callback();
}

但是这个版本不起作用,因为我的 JS 代码中总是收到一个空函数。 FABridge 似乎正在削减其余部分。然后我尝试了一种不同的方法。我写了一个小的 JS 方法,它采用函数的名称并从 JS 端创建回调。

registerFlexCallback = function(registerMethod, callback, id) {
/*
workaround to create a callback for an AS method, which can be called by Javascript
* registerMethod - Javascript method which shall be called for registration with the created callback as parameter
* callback - AS method that shall be called by Javascript (available over the FABridge interface)
* id - ID of the flash object (use Application.application.id in AS)
*/
var swf = document.getElementById(id);
eval(registerMethod + "(swf." + callback + ");");
};

此浏览器适用于 Internet Explorer,但不适用于其他浏览器。例如在 Firefox 中我收到以下错误消息:

NPMethod called on non-NPObject wrapped JSObject!

有人能告诉我,这个错误是关于什么的(可能是某种安全问题)?或者有谁知道如何为我的 AS3 方法创建可由 JS 调用的回调?

最佳答案

这是因为函数不会跨 FABridge 序列化。在你的意思

ExternalInterface.call("testAPICallbackFromJS", Application.application.foobar);

第二个参数永远为空。我所做的是通过 eval 在 HTML 页面上添加一个包装器方法,该方法指向我的嵌入,因此添加了回调。所以你必须添加一个额外的,虽然烦人的步骤:

ExternalInterface.addCallback("foobar", foobar);

var callBack:String = "";
var functionName:String = UIDUtil.createUUID;
callBack = "function " + functionName + "( ){ " +
"document.getElementById('applicationName').foobar(arguments);"+
"}";
ExternalInterface.call("eval", callback);


ExternalInterface.call("testAPICallbackFromJS", functionName);

你看到的 NPObject 错误我很确定是一个安全错误(基于它在 FF 代码中的来源)可能会阻止你动态注入(inject)可以在没有 JS 解释器进入的情况下评估的方法道路。

我什至没有尝试编译上面的内容,所以希望你能理解要点。

关于javascript - 从 Javascript 调用 Flex/AS3 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1484861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com