首先我们来看看Flash CS系列以及之前版本的自动生成的代码吧:
- <object
- classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
- codebase="http://download.macromedia.com
- /pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
- width="400" height="300" id="movie" align="">
- <param name="movie" value="movie.swf">
- <embed src="movie.swf" quality="high" width="400"
- height="300" name="movie" align=""
- type="application/x-shockwave-flash"
- plug inspage="http://www.macromedia.com/go/getflashplayer">
- </object>
然后看看那 SWFObjcet 的官方标准方式:
- <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="800" height="600" id="myFlashContent">
- <param name="movie" value="untitled.swf" />
-
- <object type="application/x-shockwave-flash" data="untitled.swf" width="800" height="600">
-
- <a href="http://www.adobe.com/go/getflashplayer">
- <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
- </a>
-
- </object>
-
- </object>
虽然SWFObject的标准产出,摒弃了非XHTML 规范中的 <embed>, 但是你也看见了,还是需要很多重复的参数,一个参数写两次啊。。。。。
对于痛恨重复劳动的人们来说,可以这样写
- <object height="100%" width="100%" type="application/x-shockwave-flash" data="/swf/clock.swf">
- <param value="/swf/clock.swf" name="movie"/>
- <param value="true" name="allowfullscreen"/>
- <param value="always" name="allowscriptaccess"/>
- <param value="high" name="quality"/>
- </object>
至于为什么,请参看这篇文章吧
======================================================[King Fo的分界线]========
看不懂?
好吧我给提要下
首先要从<object>标签说起
我们先比较下只支持IE的<object>标签写法以及非IE下的<object>标签写法
-
- <object height="100%" width="100%" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000">
- <param value="/swf/clock.swf" name="movie"/>
- <param value="true" name="allowfullscreen"/>
- <param value="always" name="allowscriptaccess"/>
- <param value="high" name="quality"/>
- </object>
-
- <object data="/swf/clock.swf" type="application/x-shockwave-flash" width="100%" height="100%">
- <param name="allowfullscreen" value="true">
- <param name="allowscriptaccess" value="always">
- <param name="quality" value="high">
- </object>
我们发现在IE下,object 标签属性的 classid 的属性,通过google 搜索可以知道 该属性就是调用ActiveX的GUID,很明显,只有IE支持,而 type="application/x-shockwave-flash" 则是 MIME (多用途的网际邮件扩充协议) 声明类型。眼熟吧? 在HTTP头里也可以找到它。
而data则是用于定义<object>标签的数据源(PS:IE曾经有过此属性非常白痴的漏洞。。。)
因此我们即可尝试以下标签方式支持所有浏览器。。。。。
- <object
- type="application/x-shockwave-flash" data="movie.swf"
- width="400" height="300">
- <param name="movie" value="movie.swf" />
- </object>
可是呢,这个样子有个可恶的毛病,而且只有IE才有的毛病,即,一般的swf是作为流下载并观看的,以上标签插入方式在非IE下是这样工作的,但是!!! 该死的IE是等这个Flash全部下载好才播放。。。这就意味着更多的等待时间。。。。。
好吧~~ 谁让IE占用率那么高呢? 为了能够精简代码,而又可以流式播放怎么办呢? 当然~~来个Preloading嘛~~ 预载的flash播放器~~~,然后通过flashVars传递~~~~~~
以下是留给读者的测试(共2题自测):
题A:
在原文中使用传参同样使用了2次
- <object type="application/x-shockwave-flash
- data="c.swf?path=movie.swf"
- width="400" height="300">
- <param name="movie"
- value="c.swf?path=movie.swf" />
- <img src="noflash.gif"
- width="200" height="100" alt="" />
- </object>
那么这样能否成功呢?
- <object type="application/x-shockwave-flash
- data="c.swf"
- width="400" height="300">
- <param name="movie"
- value="c.swf" />
- <param name="flashVars"
- value="path=movie.swf"/>
- <img src="noflash.gif"
- width="200" height="100" alt="" />
- </object>
题B
这样写有效么? 要注意什么?
- <object
- type="application/x-shockwave-flash"
- width="400" height="300" data='movie.swf' >
- <param name="movie" value="movie.swf" />
- </object>
爱上Flash/爱上Flex/爱上JS/爱上(x)HTML/爱上CSS吧!!!!!!