当前位置: 代码迷 >> Web前端 >> webkit/opera中window[name]获取flash对象的非一般实现
  详细解决方案

webkit/opera中window[name]获取flash对象的非一般实现

热度:991   发布时间:2012-12-26 14:39:29.0
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]。

  相关解决方案