firefox、 chrome、ie8通过什么方式调用as3 addCallback
2014-05-17 22:53
344 查看
今天几乎花了4、5个小时来处理各种浏览器获取as3 addCallback函数的方法,firefox无论如何都不能调用as3中的ExternalInterface.addCallback方法, google基本都被我翻烂,最后偶然发现……。
这是嵌入html的代码:
问题不在这里,如果你在三个浏览器中通过这个对象调用js定义的方法,都能成功;但要是想在js中调用as3中定义的向外提供的函数接口,chrome/ie8会成功,但firefox不行,它始终无法获得addCallback里面的方法。我试过很多方法后,最后发现令人非常诧异的结论,那就是firefox需要通过embed才能使js调用as3暴露的函数接口,我现在用的firefox版本是29.0.1,其它早期的版本是不是这样我不清楚。因此,你想在firefox中使用flash,嵌入object显示没有问题,但要使用里面的方法,得获取embed,因此明智的嵌入flash的做法就像开头代码所写的。一块使用object和embed。
这是嵌入html的代码:
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="voice" type="application/x-shockwave-flash" data="mp3Player.swf'; ?>" style="border: 0px; overflow-y:hidden; -moz-outline-style: none; outline:none;" width="20px" height="20px"> <param name="movie" value="mp3Player.swf'; ?>"> <param name="wmode" value="#fff"> <param name="quality" value="low"> <param name="version" value="10.2"> <param name="allowScriptAccess" value="always"> <embed width="20" height="20" align="absmiddle" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" allowscriptaccess="always" bgcolor="#fff" quality="high" menu="false" loop="false" src="http://sumsung753.blog.163.com/blog/mp3Player.swf'; ?>" name="voice" haspriority="true"> </object>下面这个是adobe官方提供的方法:
function thisMovie(movieName) { if (navigator.appName.indexOf("Microsoft") != -1) { return window[movieName]; } else { return document[movieName]; } }在很多时候,上面的方法没有问题,ie8通过window.name获得embed,chrome/firefox通过document.id获得object,你会发现它们返回的都是player对象。
问题不在这里,如果你在三个浏览器中通过这个对象调用js定义的方法,都能成功;但要是想在js中调用as3中定义的向外提供的函数接口,chrome/ie8会成功,但firefox不行,它始终无法获得addCallback里面的方法。我试过很多方法后,最后发现令人非常诧异的结论,那就是firefox需要通过embed才能使js调用as3暴露的函数接口,我现在用的firefox版本是29.0.1,其它早期的版本是不是这样我不清楚。因此,你想在firefox中使用flash,嵌入object显示没有问题,但要使用里面的方法,得获取embed,因此明智的嵌入flash的做法就像开头代码所写的。一块使用object和embed。
var thisMovie = (function() { return document[objectid] || window[embedname] || $('embed[name="voice"]')[0] || null; })();// 判断能否获取到as3方法 $('div.soundmark').find('a').mouseover(function(e){ if (typeof thisMovie.playMp3 == 'function') { thisMovie.playMp3('voice5376395881b32.mp3'); } });如果你问上面的firefox已经通过document.id获取到了object就不会再执行下面的$('embed name'),是的,至于为什么这样等有有空再研究。
相关文章推荐
- js 控制textbox enter 回车 禁止提交功能(ie9,firefox,ie8,chrome测试通过)
- JavaScript实现二级、多级(N级)联动下拉列表框更新版,支持IE6,FireFox,函数和类两种调用方式,支持到N级,非常通用。
- [收藏]通过命令的方式调用系统的小工具
- IE8 RC1、Opera、Firefox、Chrome性能对决(组图)
- Chrome、Firefox、IE6|IE7|IE8、Opera、Safari CSS HACK
- CALLBACK, WINAPI, AFXAPI和函数调用方式
- 用什么方式才能够通过PC访问wap.monternet.com呢
- c#如何通过https方式调用java写的WebServices
- Java调用Delphi DLL(通过C++调用和直接调用两种方式)
- IE8 RC1、Opera、Firefox、Chrome性能对决(组图)
- 函数调用方式CALLBACK与WINAPI
- .NET Compact Framework 2.0下调用EnumWindows(Callback方式)
- ExternalInterface.addCallback()方法,as2 和 as3的区别
- ExternalInterface.addCallback()方法,as2 和 as3的区别
- 浅谈 IE8, Chrome, firefox, opera下使用raphael库 中的image
- 通过web方式远程调用ANT编译(一)
- ***通过什么方式***网吧
- 大家来说说,都是通过什么方式向老板提加薪的事的??
- CALLBACK, WINAPI, AFXAPI和函数调用方式
- 通过get或post的方式来调用web service