<embed src="player.swf" ...> 頁面加載即自動播放,無法暫停。
SWF 內部時間軸幀腳本或 Document 類構造函數直接調用 play()。瀏覽器僅負責加載 SWF 二進制流,**無法從外部控制 SWF 內部邏輯**,除非 SWF 暴露 API(ExternalInterface)或接受 FlashVars 參數。
| 方案 | 前提條件 | 實施步驟 | 可行性 |
|---|---|---|---|
FlashVars 傳遞 autoPlay=false | SWF 源碼中讀取 loaderInfo.parameters.autoPlay 並判斷 | HTML 添加 <param name="flashvars" value="autoPlay=false"> | ⭐⭐⭐⭐⭐(需源碼配合) |
| ExternalInterface.call("pause") | SWF 註冊 ExternalInterface.addCallback("pause", pauseHandler) | JS 調用 swfObject.pause() | ⭐⭐⭐⭐(需源碼配合) |
| 修改 SWF 源碼重新發布 | 擁有 .fla/.as 源文件 | 刪除構造函數中的 play(),改為停幀 stop() | ⭐⭐⭐⭐⭐(徹底解決) |
| JS 暫停(無源碼) | 無 | 不可行——瀏覽器無權操作 SWF 內部時間軸 | ❌ |
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="640" height="360">
<param name="movie" value="player.swf" />
<param name="flashvars" value="autoPlay=false" />
<param name="wmode" value="transparent" />
<!--[if !IE]>>
<object type="application/x-shockwave-flash" data="player.swf" width="640" height="360">
<param name="flashvars" value="autoPlay=false" />
<param name="wmode" value="transparent" />
</object>
<!--<![endif]-->
</object>
// Document Class
public class Player extends Sprite {
public function Player() {
var autoPlay:Boolean = loaderInfo.parameters.autoPlay == "true";
if (!autoPlay) {
stop(); // 停在第一幀
}
}
}
Flash 已停止更新(2020 EOL),建議遷移至 HTML5 Video (<video>) 或 HLS/DASH + Video.js,原生支持 autoplay="false"、移動端兼容、無安全漏洞。
無源碼無法禁止 SWF 自播;有源碼請在構造函數 stop() 並暴露 FlashVars 控制。長遠看,盡早替換為 HTML5 視頻方案。