早期嵌入 Flash 的標準做法是同時使用 <object> 和 <embed> 標籤,以兼容不同瀏覽器。但這導致參數重複、代碼冗餘,且 <embed> 不符合 W3C 標準,無法通過驗證。更糟的是,IE 在 SP2 後限制 ActiveX 交互,用戶必須點擊激活,嚴重影響體驗。
object 和 embed 參數大量重複,修改參數需改兩處。embed 非 W3C 標準,導致頁面驗證失敗。SWFObject 是一個成熟的 JavaScript 庫,優勢明顯:
<div id="swfid"></div>
<script type="text/javascript" src="swfobject.js"></script>
<script type="text/javascript">
swfobject.embedSWF("test.swf", "swfid", "300", "120", "9.0.0", "expressInstall.swf");
</script>
參數說明: SWF 路徑、容器 ID、寬、高、最低版本要求、Express Install SWF 路徑(可選)。同頁多處嵌入只需重複語句並更換容器 ID。
三種等效寫法,推薦 JSON 風格:
var flashvars = { name1: "hello", name2: "world", name3: "foobar" };
var params = { menu: "false" };
var attributes = { id: "dynamicContent2", name: "dynamicContent2" };
swfobject.embedSWF("test.swf", "content2", "300", "120", "6.0.0", "expressInstall.swf", flashvars, params, attributes);
flashvars:傳遞給 SWF 的變量(ActionScript 可通過 loaderInfo.parameters 獲取)。params:Flash Player 參數(如 menu, wmode, allowScriptAccess 等)。attributes:生成的 object 標籤屬性(如 id, name, styleclass 等)。swfobject.embedSWF("test.swf", "content5", "300", "120", "6.0.0", "expressInstall.swf",
{name1:"hello",name2:"world",name3:"foobar"},
{menu:"false"},
{id:"dynamicContent5",name:"dynamicContent5"});
放棄笨重的雙標籤嵌入,擁抱 SWFObject。它不僅解決了兼容性、標準性、用戶體驗等歷史難題,還提供了強大的版本檢測與參數管理能力,是嵌入 Flash 的現代最佳實踐。