Firefox" Bad NPObject"使用Function.apply()时swf出错

时间:2015-02-24 12:16:01

标签: javascript actionscript-3 flash firefox externalinterface

我正在使用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作为私人数据!

我发现这个错误的唯一帮助与我的问题无关,如:

  • 此刻一切准备就绪;实际上,该操作首先由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。但显然一切都在它的内部和同一个领域,所以它不应该是一个问题......应该吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您想将参数作为数组添加到函数中,可以使用ECMA6定义的Spread运算符中的新函数进行尝试:

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