Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何修复:“;对非NPObject包装的JSObject调用了NPMethod“;错误?_Javascript_Flash_Firefox - Fatal编程技术网

Javascript 如何修复:“;对非NPObject包装的JSObject调用了NPMethod“;错误?

Javascript 如何修复:“;对非NPObject包装的JSObject调用了NPMethod“;错误?,javascript,flash,firefox,Javascript,Flash,Firefox,嗨 我试图从javascript调用flash对象中定义的方法 (firefox-3.0/Linux)并获得异常:“NPMethod已调用 非- NPObject包装的JSObject” 如果我对window.document.flash\u object.func()使用eval,它会抛出 “对非NPObject包装的JSObject调用了NPMethod” 其中,如果我在给定的页面中定义javascript函数 下: 函数myFunc(){ 返回flash_object.func() } 然

我试图从javascript调用flash对象中定义的方法 (firefox-3.0/Linux)并获得异常:“NPMethod已调用 非- NPObject包装的JSObject”

如果我对window.document.flash\u object.func()使用eval,它会抛出 “对非NPObject包装的JSObject调用了NPMethod”

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

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

}

然后对window.document.myFunc()进行评估,结果正常

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

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


函数changeColor(){
mymovie.changeColor();
}
函数getColorNP(){
var func=mymovie.getColor;
func();
}
getColorNP
getColor
getColorNP抛出异常
错误:对非NPObject包装的JSObject调用了NPMethod!
源文件:http://my.host/Colors/colors.html
getColorNP抛出异常
错误:对非NPObject包装的JSObject调用了NPMethod!
源文件:http://my.host/Colors/colors.html
现在,向javascript大师提问: 给定flash对象和方法名,如何调用该对象上的方法。比方说,函数接受两个参数:一个flash对象和一个方法名作为字符串。我想对该函数中的object.method()进行求值。这可能吗?如果可能的话,请你解释一下如何做到这一点

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

Thx, 钱德拉

你看了吗

我也在使用selenium,有两个项目支持flex/flash:

FlashSelenium:是Selenium RC客户端驱动程序的扩展,它使Selenium RC客户端测试驱动程序能够调用Flex应用程序的ActionScript方法。FlashSelenium依靠开发人员手动公开Flex应用程序特定的方法和组件。

Selenium Flex API:是Selenium IDE的扩展,是一种自动公开Flex应用程序UI组件的机制

我最近开始使用它们,并且在firefox上运行测试时遇到了与您提到的相同的问题(NPMethod在非NPObject包装的JSObject上调用!),并且当javaScript来自另一个窗口时,firefox似乎不允许javaScript调用Flash

在我的例子中,通过使用*firefoxproxy调用selenium解决了这个问题


关于,

将调用包装到闭包中是可以的(并且您不需要求值)

当您尝试将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函数时,您不应该停止链接链。

这是一个变体,在尝试在flash中设置jQuery窗口焦点/模糊事件处理程序时,我遇到了“在非NPObject包装的JSObject上调用NPMethod”错误,如下所示:

    if (ExternalInterface.available) {
      ExternalInterface.addCallback("on_focus", on_activate);
      ExternalInterface.addCallback("on_blur", on_deactivate);
      ExternalInterface.call("eval", "if ($) $(window).focus($('object')[0].on_focus);");
      ExternalInterface.call("eval", "if ($) $(window).blur($('object')[0].on_blur);");
    }
修复方法是通过添加额外的函数闭包来延迟SWF选择器:

    if (ExternalInterface.available) {
      ExternalInterface.addCallback("on_focus", on_activate);
      ExternalInterface.addCallback("on_blur", on_deactivate);
      ExternalInterface.call("eval", "if ($) $(window).focus(function() { $('object')[0].on_focus() });");
      ExternalInterface.call("eval", "if ($) $(window).blur(function() { $('object')[0].on_blur() });");
    }
    if (ExternalInterface.available) {
      ExternalInterface.addCallback("on_focus", on_activate);
      ExternalInterface.addCallback("on_blur", on_deactivate);
      ExternalInterface.call("eval", "if ($) $(window).focus($('object')[0].on_focus);");
      ExternalInterface.call("eval", "if ($) $(window).blur($('object')[0].on_blur);");
    }
    if (ExternalInterface.available) {
      ExternalInterface.addCallback("on_focus", on_activate);
      ExternalInterface.addCallback("on_blur", on_deactivate);
      ExternalInterface.call("eval", "if ($) $(window).focus(function() { $('object')[0].on_focus() });");
      ExternalInterface.call("eval", "if ($) $(window).blur(function() { $('object')[0].on_blur() });");
    }