disableremoteplayback 在 iOS Safari 中无效——它既不隐藏 AirPlay 按钮,也无法禁用投屏功能,系 WebKit 已知限制;唯一可靠视觉隐藏方式是通过 video::-webkit-media-controls-wireless-playback-status { display: none !important; }。
disableremoteplayback 在 iOS Safari 中**不生效**——它不会阻止 AirPlay 按钮出现,也不能禁用 AirPlay 投屏功能。
disableremoteplayback 对 iOS Safari 无效该属性是 HTML5 <video> 元素的布尔属性,设计初衷是告诉浏览器“这个视频不支持远程播放”,理论上应隐藏 AirPlay 图标。但 iOS Safari(截至 iOS 16.7 / Safari 16.6)完全忽略该属性,无论是否设置 disableremoteplayback,只要系统检测到可用 AirPlay 设备,右上角 AirPlay 按钮照常显示并可点击。
这是 WebKit 的已知限制,并非代码写错或缓存问题。官方 Bugzilla 和 WebKit GitHub issue 中均有确认(如 WebKit #170924)。
disableremoteplayback 在 macOS Safari 上部分生效(可隐藏按钮,但无法阻止 JS 主动调用 webkitShowPlaybackTargetPicker())playsinline + muted + autoplay,AirPlay 按钮仍存在由于无法通过标准 API 禁用,工程中常用视觉隐藏方式规避用户误触。注意:这不是禁用,而是掩盖 UI 元素。
关键点在于定位到 Safari iOS 渲染出的 AirPlay 按钮(它是一个 ::-webkit-media-controls-wireless-playback-status 伪元素),然后用透明层覆盖或直接设为不可见:
video::-webkit-media-controls-wireless-playback-status { display: none !important;}
该规则需在页面 CSS 中声明,且必须带 !important;仅加 display: none 不够,因为 Safari 内部样式权重极高。
<video> 控件有效,对自定义控件无影响Web 页面本身没有权限关闭设备级 AirPlay 能力。若业务强要求禁止投屏(如 DRM 内容、考试系统),唯一可靠路径是:
allowsAirPlayForVideo 并设为 false
iPhone.*Safari 或 iPad.*Safari,返回降级页面(如用 Canvas 播放帧序列,绕过原生 <video>)MediaSession API 设置 metadata 并监听 playbackstatechange,但无法拦截 AirPlay 启动动作纯前端 JS 无法监听或取消 AirPlay 按钮点击事件——它不属于标准事件流,也不触发 click 或 contextmenu。
本地开发常误判效果,原因多为环境混淆:
disableremoteplayback,误以为 iOS 也生效<style> 标签里但未加 !important,被 Safari 内置样式覆盖真机测试时,记得先打开一个 AirPlay 接收设备(如 Apple TV 或支持 AirPlay 2 的音箱),否则按钮根本不会出现,也就无从验证隐藏逻辑是否起作用。