Screen Wake Lock 屏幕常亮支持
发布于
Screen Wake Lock API 允许页面请求让设备屏幕保持常亮、不进入变暗或锁定状态。 当文档变为隐藏状态时,浏览器会自动释放该锁,因此页面需要在用户返回时重新申请。
浏览器与生态支持
Section titled “浏览器与生态支持”- 图例
- 支持
- 部分支持
- 需开启标志
- 不支持
- 未知
| 浏览器 / 平台 | 支持 | 版本 | 置信度 | 来源 | 备注 |
|---|---|---|---|---|---|
| Chrome (Desktop) | 支持 | 84 | 高 | 来源 | — |
| Chrome (Android) | 支持 | 84 | 高 | 来源 | 1 |
| Edge (Desktop) | 支持 | 84 | 高 | 来源 | 2 |
| Firefox (Desktop) | 支持 | 126 | 高 | 来源 | — |
| Firefox (Android) | 支持 | 126 | 高 | 来源 | 3 |
| Safari (macOS) | 支持 | 16.4 | 高 | 来源 | — |
| Safari (iOS) | 部分支持 | 16.4 → 18.4 | 高 | 来源 | 4 |
| Samsung Internet | 支持 | 14.0 | 高 | 来源 | 5 |
| WebView (Android) | 支持 | 84 | 高 | 来源 | 6 |
| Opera | 支持 | 73 | 低 | 来源 | — |
- 由 browser-compat-data 镜像自 Chrome 的数据推导。
- 由 browser-compat-data 镜像自 Chrome 的数据推导。
- 由 browser-compat-data 镜像自 Firefox 的数据推导。
- 在 standalone 模式的主屏幕 Web 应用中不可用。见 bug 254545(https://webkit.org/b/254545#c32)。
- 由 browser-compat-data 镜像自 Chrome Android 的数据推导。
- 由 browser-compat-data 镜像自 Chrome Android 的数据推导。
申请一个 'screen' 唤醒锁,并保留返回的 WakeLockSentinel 引用以便之后释放:
let wakeLock = null;
async function requestWakeLock() { wakeLock = await navigator.wakeLock.request('screen'); wakeLock.addEventListener('release', () => { wakeLock = null; });}在屏幕不再需要保持常亮时显式释放它:
async function releaseWakeLock() { if (wakeLock) { await wakeLock.release(); wakeLock = null; }}如何在运行时检测
Section titled “如何在运行时检测”在调用 request() 之前先检测 navigator 上是否存在 wakeLock。如果不存在,则
回退到应用原本没有唤醒锁时的行为(例如保留屏幕的默认超时设置):
async function keepScreenAwake() { if (!('wakeLock' in navigator)) { console.warn('Screen Wake Lock not supported; screen may still dim.'); return null; } try { return await navigator.wakeLock.request('screen'); } catch (err) { console.warn(`Wake lock request failed: ${err.message}`); return null; }}- 当文档的可见性状态变为
hidden时,浏览器会释放该锁,并在WakeLockSentinel上触发release事件;请监听visibilitychange,并在文档重新可见时重新 申请锁。 - 引用的 MDN 兼容性数据记录:Firefox 从 126 版本起支持、Chrome 从 84 版本起支持、 Safari 从 16.4 版本起支持;因此应运行下方的特性检测,而不能仅凭浏览器名称假设可用。
- 引用的 MDN 兼容性数据将 iOS 版 Safari 16.4 至 18.4 之前的实现记录为部分实现, 因为它无法在独立主屏幕 Web App 中工作;该数据记录 iOS 版 Safari 从 18.4 起支持。
- 当文档未处于完全活跃状态、或其可见性状态为
hidden时,request()会被 拒绝,因此只应在确认页面可见后再调用它。
- Contact Picker —— 另一个需要临时用户激活的能力。
- Background Fetch
← 返回兼容性浏览器。