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
 

你可能感兴趣的:(JavaScript)