仅在使用 Function.apply() 时,带有 swf 的 Firefox“Bad NPObject”错误
Posted
技术标签:
【中文标题】仅在使用 Function.apply() 时,带有 swf 的 Firefox“Bad NPObject”错误【英文标题】:Firefox "Bad NPObject" error with swf only when using Function.apply() 【发布时间】:2015-04-26 01:30:25 【问题描述】:我在使用 flash 和 firefox(最新,35.0.1)时遇到了困难,但找不到任何解决方案。 我想用 javascript 调用一个 ActionScript 函数,使用 ExternalInterface。 所以我写了这个简单的 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 抛出错误:
错误的 NPObject 作为私有数据!
我发现的有关此错误的唯一帮助与我的问题无关,因为:
此时一切准备就绪;实际上,该操作首先由用户对 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);
;
反正这个有很多问题:
我可以只向函数传递一个参数 ...而且我要检查参数是否为“数据”参数不为空 因此我不能传递空参数(不是最大的问题)所以我只需要能够将参数传递给 swf(0,一个或多个!) 而且我也很想了解正在发生的事情。
我说没有跨域问题,其实是facebook内的iframe。但显然所有内容都在其中并且在同一个域上,所以这应该不是问题.. 应该吗?
谢谢!
【问题讨论】:
尝试阅读此***.com/questions/1038668/… 谢谢,但我的问题不应该与跨域问题有关,因为一切都在同一个域上。无论如何,我会尝试将 allowscriptaccess 设置为“always”,尽管默认情况下它设置为“sameDomain”,这应该足够了。所以我不确定这是否能解决任何问题.. allowscriptaccess 应该为 true 与跨域策略无关,请阅读文档 我明确地将 allowscriptaccess 设置为“always”;正如预期的那样,我仍然有错误。在您的链接中还提到了 System.security.allowDomain,尽管最初的问题再次是 2 个域上的两个文件。也许我误解了一些东西,但我仍然有这个“Bad NPObject”错误。奇怪的是,它只是通过不使用 Function 对象来工作......我不明白为什么。无论如何,谢谢你的帮助 【参考方案1】:如果您想将参数作为数组放入函数中,您可以使用 ECMA6 中定义的新扩展运算符尝试:
App.swfCall = function(callbackName, data)
var swf = $('#swf object, #swf embed')[0];
if(typeof(swf[callbackName]) === "function")
swf[callbackName](....data);
;
操作员的描述可以在这里找到: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Operators/Spread_operator
【讨论】:
如何启用 ES6? 无需激活。最近的浏览器支持它!见kangax.github.io/compat-table/es6以上是关于仅在使用 Function.apply() 时,带有 swf 的 Firefox“Bad NPObject”错误的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript Function.apply() 函数详解