论坛首页 Web前端技术论坛

webkit/opera中window[name]获取flash对象的特殊实现

浏览 3116 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-06-05  

为了兼容多数浏览器,我们一般同时采用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]。

 

 

 

论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics