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

时间:2012-01-20 04:38:26

标签: jquery adobe flash 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>

以上内容会附加到#VideoMain

然后我有以下内容:

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

由于控制台错误而失败:

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

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

2 个答案:

答案 0 :(得分:73)

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

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

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

答案 1 :(得分:1)

我收到了同样的错误消息。只有Flash在Flash崩溃后返回的ExternalInterface调用(出于什么原因)时才会出现此问题。我实现的修复是:检查Flash对象是否仍在运行,以及回调是否仍然是该对象的函数。