你好,
我正在尝试从 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/