disableRemotePlayback在低版本Chrome/Edge中不支持,仅高版本Chromium内核浏览器(如Chrome 78+、Edge 79+)及Safari iOS 15.4+/macOS 12.3+部分支持,Firefox始终不支持,且该属性仅为提示性非强制策略。

disableRemotePlayback 在低版本浏览器中根本不起作用,别白费力气加这个属性。
低版本 Chrome / Edge(disableRemotePlayback
Chrome 75 才开始支持该属性,更早版本(如 68–74)解析时直接忽略,既不报错也不生效。Edge Legacy(非 Chromium 版)完全不支持。用户右键菜单、地址栏 Cast 图标照常显示,点击后仍可投整个标签页。
- 检查方法:在控制台执行
document.createElement('video').disableRemotePlayback,返回undefined即代表不支持 - 不能靠
try/catch检测,因为属性读取不抛异常,只是没定义 - 动态设置(如
el.setAttribute('disableRemotePlayback', ''))在这些旧版本里同样无效
Firefox 和 Safari 旧版连“提示”都做不到
Firefox 至今未实现 disableRemotePlayback,设了等于没设;Safari 直到 iOS 15.4 / macOS 12.3 才加入 AirPlay 禁用提示,此前所有版本(包括 iOS 14、macOS 11)对该属性完全静默处理。
使用 PptxGenJS 和 Python 解析,将结构化的 HTML/CSS 幻灯片内容转换为原生、可编辑的 PowerPoint(.pptx)演示文稿。
- iOS 14 用户点视频右上角 AirPlay 图标,照样能选设备——
disableRemotePlayback对他们毫无约束力 - 不要在
<video>上同时写disableRemotePlayback和controlslist="noremoteplayback",后者是冗余的,且controlslist中的noremoteplayback实际等价于前者,但兼容性更差 - 若需兼容 iOS 12–14,唯一可行动作是监听
webkitbeginfullscreen事件,检测到全屏尝试时立即pause()并提示“请在当前窗口观看”
真要防低版本投屏,只能放弃前端“提示”,转向服务端控制
前端属性只是协商信号,低版本浏览器连信号都不听。真正起效的只有服务端拦截和播放环境管控:
立即学习“前端免费学习笔记(深入)”;
- 所有视频资源必须走带鉴权的代理路径(如
/v/<video-id>?t=173XXXXXX&s=abc123</video-id>),过期时间严格控制在 5 分钟内 - 校验请求头中的
Referer必须是你自己的域名,且禁止空 Referer;对低版本 UA(如Chrome/69)可额外增加 token 绑定 IP 或设备指纹 - 对 HLS 流,确保
.m3u8和每个.ts分片都单独鉴权,避免被缓存或抓包复用 - 禁用
Range请求头处理(或只允许小范围字节读取),大幅提高盗链下载成本
低版本浏览器的投屏防护没有“优雅降级”方案——要么接受它不可控,要么把防线彻底移到服务端和网络层。前端加一堆属性,只会给你一种“已经做了”的错觉。


















