firefox NPMethod called on non-NPObject wrapped JSObject!错误
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)" />
加支付宝好友偷能量挖...
原创文章,转载请注明出处:firefox NPMethod called on non-NPObject wrapped JSObject!错误