未捕获错误:在NPObject上调用方法时出错

AnA*_*ice 34 flash jquery adobe swfobject

我的页面上有一个flash视频如下:

<script type="text/javascript">
var flashvars = {
};
var params = {
    movie: "VideoMain.swf",
    quality: "high",
    bgcolor: "#000000",
    allowScriptAccess: "always",
    wmode: "transparent"
};
var attributes = {
  id: "VideoMain",
  name: "VideoMain",
  classid: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
  width: "100%",
  height: "100%"
};
swfobject.embedSWF("./video/VideoMain.swf", "myVideoContent", "100%", "100%", "11.0.0","", flashvars, params, attributes);
</script>

<div id="myVideoContent">
    <h1>Oooppsss....you need flash or a newer version of flash</h1>
    <p><a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>
</div>
Run Code Online (Sandbox Code Playgroud)

以上内容将附加到#VideoMain中

然后我有以下内容:

$('#X.click').click(function(e) {
    var flash = document.getElementById("VideoMain");
    flash.sendToActionScriptPublishVideo(true);
});
Run Code Online (Sandbox Code Playgroud)

这会因控制台错误而失败:

Uncaught Error: Error calling method on NPObject.
(anonymous function)
jQuery.event.dispatchjquery.js:3256
jQuery.event.add.elemData.handle.eventHandlejquery.js:2875
Run Code Online (Sandbox Code Playgroud)

任何想法在这里可能是错的?谢谢

小智 73

NPObject是通过浏览器公开的任何"外来"代码的"接口"(外来的,如同外来的JavaScript,否则它可能是浏览器自己的对象,例如全局窗口对象).嵌入式Flash插件肯定会实现这个"接口"(因此浏览器将其视为另一个NPObject).

当你在该对象上调用一个方法时,有几个函数包装该序列化传递给对象并返回到浏览器运行时的数据.很难确定究竟什么不起作用,但一些常见的原因包括:

  1. 该插件不会暴露(或尚未注册)具有您尝试调用的名称的方法.
  2. 插件的嵌入方式不允许进行交叉编写(限制可能是双方都有,Flash要求调用来自受信任的域,您可以通过对象标记中的设置限制插件与环境通信.
  3. 通过JavaScript调用的插件代码中引发的错误 - 我不确定是否会出现相同的错误,但很有可能.

  • 当JS试图调用暴露的Flash方法但是没有调用正确的System.security.allowDomain()/ System.security.allowinsecureDomain()时,我遇到了这个错误.如果调用allowDomain(),请确保通过与SWF(HTTPS或HTTP)相同的协议加载HTML. (5认同)
  • 第三个是我的错误 - 如果你使用的是Flash,那么在JS调用的函数中会抛出一个错误 - 使用`try..catch`块可以包含它,或者帮助你缩小范围问题是你可以解决它 (2认同)
  • 4)作为回调添加的方法必须限定为:public 5)将未定义的值传递给此方法可以创建此消息(如果您希望在Flash中使用String) (2认同)