大家在項目中常常要插入Flash Object,一般一個FlashObject在HTML中代碼是這樣的:
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8"
width="320" height="220"
id="theMediaPlayer">
<param name=movie value="mediaplayer.swf">
<param name=quality value="high">
<param name=bgcolor value="#FFFFFF">
<param name=allowFullScreen value="false">
<param name=swLiveConnect value="true">
<param name=allowScriptAccess value="sameDomain">
<param name="FlashVars" value="file=mixmediaplaylist.xml&width=320&height=220&displaywidth=320&displayheight=200&autostart=true&backcolor=0xFFFFFF">
<embed type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer"
width="320" height="220" bgcolor="#FFFFFF"
name="theMediaPlayer"
src="mediaplayer.swf"
flashvars="file=mixmediaplaylist.xml&width=320&height=220&displaywidth=320&displayheight=200&autostart=true&backcolor=0xFFFFFF">
</embed>
</object>
OBJECT和EMBED标簽的問題
看起來似乎挺複雜,首先是一個<object>對象,接着是很多的param,完了又出來一個<embed>對象,跟着一大堆的參數。其實這樣寫是因為相容性的問題。OBJECT标簽是用于windows平台的IE浏覽器的,而EMBED是用于windows和Macintosh平台下的Netscape Navigator浏覽器以及Macintosh平台下的IE浏覽器。windows平台的IE利用Activex控件來播放flash而其它的浏覽器則使用Netscape插件技術來播放flash。
具體可以參考下面的文檔:
-
Flash OBJECT和EMBED标簽詳解
-
Flash OBJECT and EMBED tag attributes
-
Adobe 的官方文檔: Macromedia Flash OBJECT and EMBED tag syntax
參考文檔我們就可以通過各種方法向客戶段按照正确的格式輸出FlashObject的代碼了,但字元串的拼接操作枯燥又容易出錯,代碼可讀性還不好,有什麼更好的辦法嗎?
在這裡要特别提一下的就是FlashObject的FlashVar參數,很多應用都要靠着這個參數傳入大量有複雜資料格式的資料對(pair),建構這個參數往往是最麻煩的。
關于FlashVar:
Using FlashVars to pass variables to a SWF使用<swfobject>

SWFObject是一種易用的、符合标準的在網頁中嵌入flash對象的方法,你隻需要在網頁中引用一個小巧的js檔案。
使用SWFObject就可以避免因為不熟悉Flash Object複雜的文法和選項帶來的浏覽器不相容的問題。
使用<swfobject>的大體代碼示範如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>SWFObject v2.0 - step 3</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript" src="swfobject.js"></script>
<script type="text/javascript">
swfobject.registerObject("myId", "9.0.0", "expressInstall.swf");
</script>
</head>
<body>
<div>
<object id="myId" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="780" height="420">
<param name="movie" value="myContent.swf" />
<!--[if !IE]>–>
<object type="application/x-shockwave-flash" data="myContent.swf" width="780" height="420">
<!–<![endif]–>
<p>Alternative content</p>
<!–[if !IE]>–>
</object>
<!–<![endif]–>
</object>
</div>
</body>
</html>
SWFObject 首頁:
http://code.google.com/p/swfobject/對于FlashVar參數的傳入,SWFObject提供了專門的函數,用起來非常友善,代碼可讀性也強了。
Opensource 的 swfobject .net control
下載下傳位址:
http://www.arjones.net/opensource/swfobject.net/這還有一個:
http://www.junasoftware.com/servercontrols/swfobject.net.aspx商業Flash object control
實際上,對于ASP.NET的開發者,使用<swfobject>也還是有很多不友善的地方,沒有強資料類型,參數傳入都要轉為字元串,還有做一些拼接的工作,代碼還是不優雅。有沒有更好的辦法呢?
ASPNetFlash WebControl
ASPNetFlash WebControl 可以讓你輕松的把一個Adobe Flash檔案插入到你的ASP.NET web forms裡面。
ASPNetFlash的網址:
http://www.aspnetflash.com/aspnetflash_Download_Free_Trial.aspx下載下傳安裝後的效果:
真的不錯,基本的屬性設定,還有對FlashVar的資料綁定支援。
http://www.arjones.net/opensource/swfobject.net/如果你還在為插入Flash Object 苦惱,快來試試這個!
參考文檔:
List Apart上的一篇文章:
http://www.alistapart.com/articles/flashembedcagematch/