惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

有赞技术团队
有赞技术团队
H
Hackread – Cybersecurity News, Data Breaches, AI and More
I
InfoQ
J
Java Code Geeks
Microsoft Security Blog
Microsoft Security Blog
G
Google Developers Blog
D
DataBreaches.Net
Recent Announcements
Recent Announcements
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog RSS Feed
Y
Y Combinator Blog
博客园 - 【当耐特】
博客园 - 聂微东
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
大猫的无限游戏
大猫的无限游戏
P
Proofpoint News Feed
量子位
C
Check Point Blog
F
Fortinet All Blogs
罗磊的独立博客
Last Week in AI
Last Week in AI
GbyAI
GbyAI
L
LangChain Blog
博客园 - 司徒正美

冷月笙寒的小窝

完整扒站实践 打造属于自己的 GitHub 主页:设计与优化记录 WPS图片与看图王去广告版 小女孩一首《左手指月》震惊了,龙源交椅山六一晚会首首惊艳,余音绕梁 BitLocker 绕过漏洞分析:WinRE 与 TxF 到底出了什么问题? Cloudflare 优选域名 加速 Pages:原理与实践 从零开发 Bing 每日壁纸图库:API 开放与开源实践 观中国人民革命军事博物馆 论狐蒂云跑路对我的影响┭┮﹏┭┮ [雪月阁] 拿侵华日军与袁隆平院士磕CP,[雪月阁]还有正常人吗? 网站用户系统实现 XMind思维导图绿色版下载附安装教程 抖音,B站,Youtobe转ifmare链接 常用办公字体 小说生成工具-NovelClaw WPS Office 365 64位国务院特别版 文思公文助手,更加方便写作公文,WPS公文助手的完美替代品 公益捐赠记录册 AutoCAD 2005-2026绿色版整合 自制3D小球时钟 SphereClock 三款下载软件测评(附:IDM绿色版下载(已解决弹窗问题)以及与NDM+FDM对比) 自制 : 一些小网页工具🎶😎🎶
关于浏览器自动播放的解决思路
Galaxy · 2026-03-06 · via 冷月笙寒的小窝

现代浏览器对音频和视频内容的自动播放实施了一系列策略,以改善用户体验并减少干扰。但是我找到了另一种方法解决 # 自动播放策略概述: 1. 用户交互要求:大多数浏览器要求用户与页面进行交互(如点击或触摸)后,才能播放有声媒体。这是为了避免未经请求的音频或视频播放对用户造成干扰。 2. 静音自动播放:浏览器通常允许静音的音频或视频内容自动播放。这意味着如果媒体内容设置为静音(muted),则可以在没有用户交互的情况下自动播放。 3. 媒体互动指数(MEI):浏览器会根据用户在网站上的媒体播放行为(如访问次数、播放时长等)计算出一个媒体互动指数。当该指数达到一定阈值时,网站将获得自动播放有声媒体内容的权限。 4. 特定条件下的自动播放:例如,用户在移动设备上将网站添加到主屏幕,或在桌面设备上安装了 PWA(渐进式 Web 应用),则可以允许自动播放。 # 电脑端自动播放流程 ![b5c19d64-ba16-4ecd-be1e-324e4e52e3f0.png](/uploads/posts/2026-03/20260307_202253_69ac189de98a9.png) # 移动端自动播放流程 ![8e62072c-0dc8-44c0-a554-7be31e60a5dd.png](/uploads/posts/2026-03/20260307_202438_69ac1906421a2.png) ## 流程说明 ### 桌面端自动播放机制 **入口检测逻辑** - **同域名访问**: 直接尝试播放,失败则回退到用户交互模式 - **外部来源**: 必须等待用户交互和鼠标检测 - **直接访问**: 同外部来源处理 **交互检测要求** - **用户交互检测**: 监听 click、mousedown、keydown、scroll、wheel 等事件 - **鼠标位置检测**: 鼠标必须进入页面中央区域(距离边界10%范围内) - **倒计时机制**: 鼠标进入中央区域后开始1.5秒倒计时 - **双重验证**: 倒计时结束时验证鼠标仍在页面内且2秒内有近期交互 **失败处理策略** - 播放失败时回退到等待用户明确点击 - 设置一次性事件监听器,用户点击时直接播放 ### 移动端自动播放机制 **页面刷新检测** - 使用 `performance.getEntriesByType('navigation')` 检测导航类型 - 备用方案:使用 `sessionStorage` 标记访问状态 - 区分 `reload`、`back_forward` 和首次加载 **差异化处理** - **首次访问(同域名/直接)**: 直接尝试播放 - **页面刷新**: 必须等待用户明确交互 - **外部来源**: 必须等待用户明确交互 **用户交互处理** - **真实上下文播放**: 在用户交互事件的回调中直接调用 `audio.play()` - **触摸事件支持**: 额外监听 `touchstart` 事件 - **持续监听**: 播放失败时不移除监听器,继续等待下一次交互 ### 🔧 技术实现细节 **页面刷新检测方法** ```javascript isPageRefresh() { // 优先使用 Performance API if (window.performance && window.performance.getEntriesByType) { const navigationEntries = window.performance.getEntriesByType('navigation'); if (navigationEntries.length > 0) { const navigationType = navigationEntries[0].type; return navigationType === 'reload' || navigationType === 'back_forward'; } } // 备用:SessionStorage 检测 const hasVisited = sessionStorage.getItem('netease_player_visited'); if (hasVisited) { return true; // 已访问过,说明是刷新 } sessionStorage.setItem('netease_player_visited', 'true'); return false; } ``` **用户交互上下文播放** ```javascript // 移动端:在真实用户交互事件中直接播放 const handleUserInteraction = async (event) => { try { await this.audio.play(); // 直接在事件上下文中播放 this.isPlaying = true; // 播放成功后移除监听器 } catch (error) { // 失败时继续等待下一次交互 } }; ``` ## 决策树 ### 桌面端决策流程 ``` autoplay: true? | v isEmbed: false? | v {referralType} internal -> 尝试直接播放 -> 失败? -> 等待用户交互 external -> 等待用户交互 + 鼠标中央区域检测 direct -> 同external | v {hasUserInteraction: true} | v {mouseInCenterArea: true} -> 1.5秒倒计时 -> {mouseInDocument: true} + {2秒内有交互} -> 播放 ``` ### 移动端决策流程 ``` autoplay: true? | v isEmbed: false? | v {isPageRefresh} false -> {referralType: internal/direct} -> 尝试直接播放 -> 失败? -> 等待用户交互 true -> 等待用户明确交互 -> 在事件上下文中播放 unknown -> 同true(默认保守策略) ``` **网站提议** 在下面填写一下对网站的提议吧