webkit/opera中window[name]获取flash对象的特殊实现
为了兼容多数浏览器,我们一般同时采用object和embed标签插入flash,如下:
<object id="mySwf" data=""> <embed src="" name="mySwf"/> </object>
?
有时候需要获取到flash对象,因此给object添加了id,给embed添加了name,两者的值刚好相同。此时如果使用window[name]来获取flash对象,各浏览器的表现就不一致了:
<object id="mySwf" data=""> <embed src="" name="mySwf"/> </object> <script> alert(window['mySwf']) </script>
?
?
IE :能获取,元素为object
Firefox :undefined,不能获取
Opera :object HTMLCollection
Safari/Chrome :object HTMLCollection
?
可以看到,在Opera/Safar/Chrome获取到的是一个集合HTMLCollection,弹出其length是2,在Opera/Safari/chrome中分别取出第1,2个元素分别是object,embed元素。
?
基本如下:
IE,window['mySwf']中的mySwf指的是Object[id=mySwf]
?
Firefox,window['mySwf']没有获取到任何元素,不支持这么获取
?
Opera/Safari/Chrome,window['mySwf']同时获取id=mySwf,name=mySwf的元素
?
最后列出准确的获取flash对象的方式:
?
function getFlashObj(name){ return document[name] || window[name]; }
?
?
这种方式在IE中获取的仍然是object对象,Firefox/Opera/Safari/Chrome中获取的是embed。
?
注意,document[name]和window[name]顺序不能调过来,如下则是错误的
?
function getFlashObj(name){ return window[name] || document[name]; }
?
?
此外,也可判断浏览器,以下是钱兄 从adobe官网提供的函数:
?
function thisMovie(movieName) { if (navigator.appName.indexOf("Microsoft") != -1) { return window[movieName]; } else { return document[movieName]; } }
?
?
如果是IE使用window[movieName],其它浏览器则使用document[movieName]。