javascript - 如何修复 : "NPMethod called on non-NPObject wrapped JSObject" error?

标签 javascript flash firefox

你好,

我正在尝试从 javascript 调用 flash 对象中定义的方法 (firefox-3.0/Linux) 并得到异常:“NPMethod 调用 非 NPObject 包裹了 JSObject”。

如果我在 window.document.flash_object.func() 上使用 eval,它会抛出 “NPMethod 调用了非 NPObject 包装的 JSObject”。

如果我在给定的页面中定义一个 javascript 函数 下面:

函数 myFunc() { 返回 flash_object.func();

然后对 window.document.myFunc() 进行评估,它工作正常。

我正在通过名为 Selenium 的测试框架运行这两个评估。 [eval(window.document.flash_object.func()) 和 eval(window.document.myFunc())].

问题似乎与调用 flash-object 方法而不传递“this”引用有关。以下是重现此问题的示例 html/js 代码:“NPMethod 在非 NPObject 包装的 JSObject 上调用”。

<script>
function changeColor() {
  mymovie.changeColor();
}
function getColorNP() {
 var func = mymovie.getColor;
 func();
}
</script>
<button type="button" onclick="getColorNP();">getColorNP</button>
<button type="button" onclick="getColor();">getColor</button>

getColorNP throws the exception
Error: NPMethod called on non-NPObject wrapped JSObject!
Source File: http://my.host/Colors/colors.html
getColorNP throws the exception
Error: NPMethod called on non-NPObject wrapped JSObject!
Source File: http://my.host/Colors/colors.html

现在,向 JavaScript 专家提问: 给定 flash 对象和方法名称,我如何调用该对象上的方法。比方说,一个函数有两个参数:一个 flash 对象和一个作为字符串的方法名称。我想在该函数内对 object.method() 进行评估。这可能吗?如果可以,请您解释一下如何做到这一点。

由于 flash 对象的方法不是标准的 javascript 函数,我认为它不可能通过 bind() 进行函数绑定(bind)。还有其他选择吗?

谢谢, 钱德拉

最佳答案

当您尝试将 flash 函数( native 代码)设置为某个变量然后调用该变量时,会发生此错误。 以您的功能为例:

function getColorNP() { // this will call error
 var func = mymovie.getColor;
 func();
}

function getColorNP() { //this will work
 mymovie.getColor();
}

如果你需要将你的 flash 函数保存到某个变量,你应该用 lambda 函数包装它。像这样:

function getColorNP() { // this will work also
 var func = function(){mymovie.getColor()};
 func();
}

所以当你在 javascript 中使用 flash 函数时,你不应该制动然后链接链。

关于javascript - 如何修复 : "NPMethod called on non-NPObject wrapped JSObject" error?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2464256/

相关文章:

javascript - 这是什么效果

flash - 实时音频流替代方案 * 无 * Flash、Silverlight

javascript - 如果封闭的 DIV 属性发生变化,Firefox 将重新启动 Flash 电影

php - 标题页中的兼容性浏览器(悬停)与 firefox

javascript - 如何测试模型中依赖于 Controller 的函数

JavaScript 循环遍历 JSON 数据并以 html 格式打印

javascript - 对于 Flex 应用程序来说,最好的 HTML/JavaScript 框架是什么?

c++ - 如何使用 C++ 和 WinAPI 检查 Web 浏览器是否正在运行?

javascript - Jquery slider PNG黑色边框IE8

javascript - jquery 的 getscript() 函数在外部文件中调用时会在哪里查找?