跳转到内容

Screen Wake Lock 屏幕常亮支持

发布于

Screen Wake Lock API 允许页面请求让设备屏幕保持常亮、不进入变暗或锁定状态。 当文档变为隐藏状态时,浏览器会自动释放该锁,因此页面需要在用户返回时重新申请。

  • 图例
  • 支持
  • 部分支持
  • 需开启标志
  • 不支持
  • 未知
浏览器 / 平台支持版本置信度来源备注
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低来源—
  1. 由 browser-compat-data 镜像自 Chrome 的数据推导。
  2. 由 browser-compat-data 镜像自 Chrome 的数据推导。
  3. 由 browser-compat-data 镜像自 Firefox 的数据推导。
  4. 在 standalone 模式的主屏幕 Web 应用中不可用。见 bug 254545(https://webkit.org/b/254545#c32)。
  5. 由 browser-compat-data 镜像自 Chrome Android 的数据推导。
  6. 由 browser-compat-data 镜像自 Chrome Android 的数据推导。

源数据: /compatibility/wake-lock.json · 全球使用占比: 91 % (StatCounter 2026-05)

来源: 规范 · MDN · 最近核验 2026-10-03 · 置信度: 低 (由来源计算)

申请一个 '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;
}
}

在调用 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() 会被 拒绝,因此只应在确认页面可见后再调用它。

← 返回兼容性浏览器。