早期 Web 專案常需嵌入 Flash (SWF) 以實現攝像頭調用、視頻播放等功能。隨著 HTML5 普及,Flash 已淘汰,但維護舊專案時仍需理解嵌入方案差異。
| 方案 | 標籤 | 優點 | 缺點 |
|---|---|---|---|
| Object + Embed (傳統官方) | <object> + <embed> | 相容性最好,功能完整 | embed 不符 W3C 標準;IE ActiveX 需點擊激活;無版本檢測 |
| 純 Object (Flash Satay) | <object> 僅 | 通過 W3C 驗證 | 需額外 holder SWF 載入目標 SWF;IE 仍有 ActiveX 問題;低版本 Safari 不支援 |
| 純 Embed | <embed> 僅 | 代碼簡潔,相容性尚可 | 不符 W3C 標準;無版本檢測 |
| JavaScript 動態嵌入 (SWFObject) | JS 生成標籤 | 解決 IE 點擊激活;內建版本檢測與 Express Install;W3C 合規;程式碼復用性高 | 需引入額外 JS 庫 |
<div id="flashContent"></div>
<script src="swfobject.js"></script>
<script>
swfobject.embedSWF("test.swf", "flashContent", "300", "120", "9.0.0", "expressInstall.swf");
</script>
參數:swf路徑、容器ID、寬、高、最低版本、expressInstall路徑(可省略)。
<script>
var flashvars = { name1: "hello", name2: "world" };
var params = { menu: "false", wmode: "transparent" };
var attributes = { id: "myFlash", name: "myFlash" };
swfobject.embedSWF("test.swf", "flashContent", "300", "120", "9.0.0", "expressInstall.swf", flashvars, params, attributes);
</script>
flashvars:傳給 Flash 內部的變數(ActionScript 可用 loaderInfo.parameters 讀取)。params:Flash Player 參數(如 wmode, allowScriptAccess)。attributes:生成的 <object> 標籤屬性。重複呼叫 embedSWF,指定不同容器 ID 即可。
expressInstall.swf 引導用戶更新。新專案請優先使用 HTML5 原生 API:
navigator.mediaDevices.getUserMedia()