Javascript取Flash对象

我本以为这个会很简单,不就是getElementById吗,不过自己试过才知道,在当今浏览器三分天下的情况下,加上一贯的Flash的奇怪的嵌入式语法(下面):

代码
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
  codebase
="http://..."
  WIDTH
="150" HEIGHT="75" id="simplemovie" ALIGN="">
  
<PARAM NAME=movie VALUE="simplemovie.swf">
  
<PARAM NAME=quality VALUE=medium>
  
<PARAM NAME=bgcolor VALUE=#FFFFFF>
  
<EMBED src="simplemovie.swf"
    quality
=medium
    
swliveconnect="true" 
    bgcolor
=#FFFFFF WIDTH="150" HEIGHT="75"
    name
="simplemovie" 
    ALIGN
=""
    TYPE
="application/x-shockwave-flash"
    PLUGINSPAGE
="http://www.macromedia.com/go/getflashplayer">
  
</EMBED>
</OBJECT>

 

 

这么简单的事情也变得不那么简单了,尤其是想做一个全兼容的方法,真的不简单。我用getElementById就死的很惨,因为在上面的这段代码中,getElementById一定会取到OBJECT对象,而Firefox是不认这个OBJECT的,它认的是下面的EMBED对象。

参阅了不少网页,最后我觉得这里的方法最为有理有据,值得参考。它用了6种方法,测试了4种浏览器,得到下面的结果:

IE6 Firefox 1  Opera 8  Netscape 7

window.document["simplemovie"]/window.document.simpleMovie
Y Y Y Y 

document.simpleMovie /document["simpleMovie"]
Y Y Y Y

window["simplemovie"]/window.simplemovie
Y N N N 

document.embeds.simplemovie/document.embeds["simplemovie"]
N Y Y Y 

document.getElementById(”simplemovie”)
Y N N N 

document.getElementsByName(”simplemovie”)[0]
Y Y N Y

这里的Y不仅指能取到对象,而且要能操作到对象,显然前两种方法兼容性最好,而不是我以为的getElementById,我顺便测试了Firefox3和Chrome,Firefox3和Firefox1一样,而Chrome2则比Firefox多支持了getElementById,显然Chrome意识到getElementById如果取到上面的OBJECT对象,没有意义,修正了一下(因为Chrome没有历史版本兼容性问题,所以可以做到这点修正)。

最终的结果是,产生了这样的一个皆大欢喜的函数:

 

代码
function getFlashMovieObject(movieName)
{
  
if (window.document[movieName])
  {
      
return window.document[movieName];
  }
  
if (navigator.appName.indexOf("Microsoft Internet")==-1)
  {
    
if (document.embeds && document.embeds[movieName])
      
return document.embeds[movieName];
  }
  
else
  {
    
return document.getElementById(movieName);
  }
}

 

转自:http://www.liuzhongshu.com/code/javascript-get-flash.html
 

posted @ 2011-02-19 09:33  bluekiss  阅读(306)  评论(0编辑  收藏  举报