微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 如何修复:“NPMethod调用非NPObject包装的JSObject”错误?

HI,

我试图从javascript调用flash对象中定义的方法
(firefox-3.0 / Linux)并获得异常:“NPMethod呼吁

NPObject包装了JSObject“.

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

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

function myFunc(){
    return flash_object.func();

}

然后做一个window.document.myFunc()的eval工作正常.

我通过一个名为Selenium的测试框架来运行这两个版本.
[eval(window.document.flash_object.func())和
的eval(window.document.myFunc())].

问题似乎是在不传递’this’引用的情况下调用flash-object方法的问题.下面是重现此问题的示例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对象,一个方法名称为string.我想在该函数内的object.method()上做一个eval.这是可能的,如果可以的话,请你解释一下如何做到这一点.

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

谢谢,
钱德拉

解决方法:

当您尝试将flash函数(本机代码)设置为某个变量然后调用此变量时,会发生此错误.
举个例子来看看你的功能

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功能时,你不应该制动链接链.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐