只有 iOS Safari 10.0+、macOS Safari 10.0+及部分 WebKit WebView 真正支持 playsinline,需同时设 playsinline="true" 和 webkit-playsinline="true";Android 主流浏览器默认内联,无视该属性,微信等 TBS 内核则完全不识别。

playsinline 在非 iOS 设备上基本无效,尤其是 Android 原生浏览器和多数定制内核(如微信、QQ 浏览器的 TBS)根本不识别该属性。
哪些设备/浏览器真正支持 playsinline
只有明确声明支持 WebKit 的环境才可靠生效:
- iOS Safari 10.0+(含 iPadOS),必须同时写
playsinline="true"和webkit-playsinline="true" - macOS Safari 10.0+(桌面端也支持内联)
- 部分基于 WebKit 的第三方 iOS App 内嵌 WebView(如邮件客户端、笔记类 App)
- Android Chrome、Firefox、Edge 等现代浏览器**忽略
playsinline**,它们默认就内联播放,无需该属性
为什么 Android 上加 playsinline 没用
Android 系统本身不依赖 WebKit 渲染引擎,playsinline 是 WebKit 专有属性。即使你写了:
<video playsinline webkit-playsinline src="a.mp4"></video>
在 Android Chrome 中它依然内联播放——但这跟属性无关,是浏览器默认行为;而在微信中它照样全屏弹出——因为 TBS 内核压根不解析这个属性。
- 微信、QQ、手机 QQ 等 App 使用 TBS 内核,只认自家方案(如
x5-video-player-type="h5") - 部分国产浏览器(如 UC、夸克)对
playsinline支持不稳定,不能作为兼容依据 - 若在 Android 上遇到意外全屏,大概率是 JS 调用了
requestFullscreen()或触发了系统级视频浮层逻辑
真正在意“跨平台内联”的实际做法
别指望单靠 HTML 属性一劳永逸。要覆盖 iOS + 微信 + 安卓主流场景,得组合策略:
- iOS:必须写齐
playsinline="true"+webkit-playsinline="true",且autoplay需用户手势触发后才能调用play() - 微信/TBS:加
x5-video-player-type="h5"(仅限腾讯系),并确保 video 容器有明确宽高(避免被识别为“横屏内容”而强制全屏) - 安卓其他浏览器:移除所有 WebKit 专属属性,专注用 CSS 控制尺寸和
object-fit,防止因宽高缺失导致渲染异常 - 统一兜底:用
poster+ 自定义播放按钮遮罩,把真实<video></video>的交互收口到 JS 控制,规避自动触发逻辑
最易被忽略的一点:iOS Safari 对 playsinline 的生效有严格前提——video 必须已插入 DOM、尺寸可计算、且未被 display: none 或 visibility: hidden 隐藏。动态插入或懒加载时,务必等元素 layout 完成后再设置属性或调用 play()。











