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

标签 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 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/

相关文章:

flash - AS3、垃圾收集和带监听器的多级 Sprite

actionscript-3 - 错误 1120 : Access of Undefined Property help please

javascript - Angular 和 FF 中的 $watch 方法

javascript - 仅渲染组件一次的逻辑

flash - 使用 Flash 获取计算机信息

actionscript-3 - AS3 阻止角色穿墙

php - 用 Flash 和 PHP 编写视频聊天小部件

javascript - 如何在通过 'Best in place' 编辑进行内联编辑时删除 html 标签

javascript - 创建新的 bindingContext 以供 subview 模型使用

actionscript-3 - 大物体的等距深度排序问题