gpt4 book ai didi

javascript - 仅当使用 Function.apply() 时,Firefox "Bad NPObject"swf 错误

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

我在 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/

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