首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

網頁嵌入 SWF 禁止自動播放:從參數到源碼級方案

     編輯:程式設計綜合問答

現象

<embed src="player.swf" ...> 頁面加載即自動播放,無法暫停。

根因

SWF 內部時間軸幀腳本或 Document 類構造函數直接調用 play()。瀏覽器僅負責加載 SWF 二進制流,**無法從外部控制 SWF 內部邏輯**,除非 SWF 暴露 API(ExternalInterface)或接受 FlashVars 參數。

可行方案對比

方案前提條件實施步驟可行性
FlashVars 傳遞 autoPlay=falseSWF 源碼中讀取 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 內部時間軸❌

HTML 標準寫法(含 FlashVars)

<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>

ActionScript 3 接收參數示例

// 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 視頻方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved