360浏览器无“播放器设置成html”功能,实为拦截video标签并启用自有播放器;可通过添加playsinline属性、动态创建video、提前load、z-index障眼法等绕过劫持。

360浏览器不支持“把播放器设置成HTML”
360浏览器本身没有“播放器设置成HTML”这个功能或配置项——它是个浏览器,不是播放器SDK。你真正想做的,大概率是:让网页里的视频/音频在360浏览器中正常用 HTML5 <video></video> 或 <audio></audio> 标签播放,而不是调用它的旧版Flash插件或内置的“360影视播放器”外壳。
为什么<video></video>标签在360浏览器里会跳转到独立播放器
360浏览器(尤其老版本)默认启用了“智能视频播放”策略:检测到页面有视频资源时,自动拦截 <video></video> 标签,替换成自己的全屏播放界面。这不是 bug,是它的主动干预行为。
- 常见错误现象:
<video src="xxx.mp4"></video>在其他浏览器能内嵌播放,但在360里点开直接弹新窗口、失去控制权、play()调用无效、canplay事件不触发 - 根本原因:360浏览器注入了全局脚本,重写了
HTMLMediaElement.prototype.play,并监听document上的video元素插入行为 - 兼容性影响:该行为在“极速模式”(基于 Chromium)下较弱,在“兼容模式”(Trident 内核)下最顽固;新版360安全浏览器 v13+ 已大幅减弱,但企业用户常卡在 v10–v12
绕过360浏览器视频劫持的实操方法
核心思路:不让它识别出这是“可接管的视频”,或提前切断它的钩子。
- 给
<video></video>加webkit-playsinline+x5-playsinline+playsinline属性,并确保容器有明确宽高(空<video></video>容易被跳过识别) - 动态创建
<video></video>元素,而非静态写在 HTML 里;插入 DOM 前先设好src和preload(比如preload="metadata"),再appendChild - 在
DOMContentLoaded后立即执行video.load(),抢在360脚本扫描前完成加载准备 - 如果仍被劫持,临时加个“障眼法”:
<video></video>外层套一层<div style="position: relative; z-index: 0;">,部分版本会因此放弃接管 <li>终极方案(不推荐但有效):在 URL 后加参数 <code>?_t=xxx强制刷新资源路径,破坏360的资源哈希匹配逻辑
检查是否真被劫持的快速验证方式
打开开发者工具(F12),在 Console 里执行:
第一步】:将安装包中所有的文件夹和文件用ftp工具以二进制方式上传至服务器空间;(如果您不知如何设置ftp工具的二进制方式,可以查看:(http://www.shopex.cn/support/qa/setup.help.717.html)【第二步】:在浏览器中输入 http://您的商店域名/install 进行安装界面进行安装即可。【第二步】:登录后台,工具箱里恢复数据管理后台是url/sho
立即学习“前端免费学习笔记(深入)”;
getComputedStyle(document.querySelector('video')).display
如果返回 "none" 或 "hidden",说明原生 <video></video> 已被隐藏,360启动了自己的播放器层;如果返回 "inline" 或 "block",且 video.readyState > 0,说明 HTML5 播放已生效。
这时候再查 video.src 是否还是原始地址、video.networkState 是否为 1(NETWORK_LOADING),就能确认是不是“表面HTML、底层被代理”。
真正在意兼容性的项目,别指望靠一个属性开关搞定;360的视频拦截逻辑藏在私有 JS 里,每次更新都可能换套路。最稳的做法是:在初始化时做一次 if (navigator.userAgent.includes('QIHU')) 分支,对它单独加延迟 load + 强制 playsinline + 禁用右键菜单(它有时靠右键菜单存在判断是否为“可接管视频”)。










