`

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]。

分享到:
评论

相关推荐

    javascript和css在IE和Firefox中的不同点及解决兼容性的方案

    - Firefox、Chrome、Safari 和 Opera 等浏览器需要特定的前缀,如 `-webkit-`、`-moz-`、`-ms-` 和 `-o-`,以支持某些 CSS3 属性。 14. **跨域 AJAX 请求** - IE 支持 `XDomainRequest` 对象处理跨域 AJAX,而...

    js_browser.rar_移动设备

    不同的浏览器使用不同的呈现引擎,例如,Chrome和Opera使用Blink,Firefox使用Gecko,Safari使用WebKit,而Internet Explorer和Edge则使用Trident和EdgeHTML。JavaScript可以用来检测当前浏览器使用的呈现引擎,通过...

    javaScript中封装的各种写法示例(推荐)

    在JavaScript编程中,封装是面向对象编程的核心概念之一,它涉及将数据和操作数据的方法捆绑在一起,形成一个独立的对象,目的是隐藏对象的实现细节,对外提供简洁的接口。封装能够提高代码的可维护性、可重用性以及...

    前端面试宝典大全.pdf

    - **SharedWorker**:允许多个窗口或标签页共享同一个Worker对象,便于实现跨窗口通信。 - **LocalStorage/SessionStorage**:通过监听存储事件实现不同标签页间的通信。 - 示例代码: ```javascript // 监听...

    JavaScript获取浏览器信息的方法

    除了获取浏览器基础信息外,我们还可以使用`window.location`对象来获取当前浏览器窗口中的URL地址以及与之相关的参数。`window.location`对象提供了许多属性,可以用来解析当前URL的不同部分,如下: - `location....

    自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结

    我们可以通过document.documentElement.clientWidth获取phys.width,而通过window.screen.width获取device-width。例如,iPhone 6的phys.width为750px,而device-width为375px。 二、 浏览器默认行为 我们知道,...

    三星9305收索

    -webkit-border-radius:0}.s_btn.btnhover{background:#317ef3;border-bottom:1px solid #2868c8;*border-bottom:0;box-shadow:1px 1px 1px #ccc}.s_btn_h{background:#3075dc;box-shadow:inset 1px 1px 5px #2964bb...

Global site tag (gtag.js) - Google Analytics