首页 > 网站 > WEB开发 > 正文

firefox NPMethod called on non-NPObject wrapped JSObject!错误

2024-04-27 13:52:41
字体:
来源:转载
供稿:网友

  Firefox使用JavaScript调用flash中注册的方法时,如果此方法通过js函数返回后执行,而不是直接通过swf容器获取到后再执行,那么在Firefox下会出现“NPMethod called on non-NPObject wrapped JSObject!”错误,其他浏览器如chrome,ie不报错。

  解决办法就是直接通过swf的容器获取到flash中注册的方法后执行,而不是通过js方法返回flash中注册的方法。

  测试代码如下

as脚本

function loadPicture(){//......代码......//......代码......}flash.external.ExternalInterface.addCallback("forJS", null, loadPicture);//注册JavaScript中调用的回调函数

HTML测试代码

<script type="text/javascript">document.write('<div class="dvswf">' + (document.all ? '<object id=swfId classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000><param name="src" value="/images/loadSwf.swf"></object>': '<embed id="swfId" type="application/x-shockwave-flash" src="/images/loadSwf.swf"/>') + '</div>');function $(Id){return document.getElementById(Id);}function getFlashMethod(swfID, container) {    if (window[swfID] && window[swfID].forJS) return container ? window[swfID] : window[swfID].forJS;    if (document[swfID] && document[swfID].forJS) return container ? document[swfID] : document[swfID].forJS;    if ($(swfID).forJS) return container ? $(swfID) : $(swfID).forJS;    return false;}function callswfmethod(container) {    var o = getFlashMethod('swfId', container);    if (o) {//能获取到注册的JavaScript回调方法或者swf容器        container ? o.forJS()//为容器时从容器中直接获取flash.external.ExternalInterface.addCallback注册的函数然后执行Firefox和其他浏览器未报错        : o(); //如果返回的是flash.external.ExternalInterface.addCallback注册的函数,firefox 执行此方法会出现“NPMethod called on non-NPObject wrapped JSObject!”错误,其他浏览器如chrome,ie不报错    }}</script> <input type="button" value="调用flash.external.ExternalInterface.addCallback注册的函数--返回函数" onclick="callswfmethod()" /><input type="button" value="调用flash.external.ExternalInterface.addCallback注册的函数--返回flash容器" onclick="callswfmethod(true)" />
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表