我在 flash 和 firefox(最新的 35.0.1)上苦苦挣扎,找不到任何解决方案。 我想使用 ExternalInterface 调用带有 javascript 的 ActionScript 函数。 所以我写了这个简单的 javascript 函数(App 只是一个包装我的函数的对象):
App.swfCall = function(callbackName, params) {
var callback = $('#swf object, #swf embed')[0][callbackName];
if(typeof(callback) === "function") {
callback.apply(null, params); // executed but throws NPObject error...
}
}
Firefox 抛出一个错误:
Bad NPObject as private data!
我找到的关于此错误的唯一帮助与我的问题无关,因为:
- 此时万事俱备;实际上,该操作首先由用户对 swf 本身的操作发起
- 没有跨域问题(所有内容都在同一个域中)
实际上,如果我不使用 Function javascript 对象(使用 call() 或 apply()),一切正常.所以这是有效的:
App.swfCall = function(callbackName, data) {
var swf = $('#swf object, #swf embed')[0];
if(typeof(swf[callbackName]) === "function") {
swf[callbackName](data);
}
};
无论如何,这有很多问题:
- 我可以只传递一个参数给函数
- ...而且我必须检查参数是否为“数据”参数不为空
- 因此我无法传递 null 参数(这不是最大的问题)
所以我只需要能够将参数传递给 swf(0,一个或多个!) 我也很想了解正在发生的事情。
我说没有跨域问题,其实是facebook内部的iframe。但很明显,一切都在它里面并且在同一个域中,所以这应该不是问题..应该吗?
谢谢!
最佳答案
如果您想将参数作为数组放入您的函数中,您可以尝试使用 ECMA6 中定义的新扩展运算符:
App.swfCall = function(callbackName, data) {
var swf = $('#swf object, #swf embed')[0];
if(typeof(swf[callbackName]) === "function") {
swf[callbackName](....data);
}
};
运算符(operator)的描述可以在这里找到: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Operators/Spread_operator
关于javascript - 仅当使用 Function.apply() 时,Firefox "Bad NPObject"swf 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28695572/