【JS Web API】Screen Wake Lock 浏览器自带的防息屏 API

2026-05-11 16:50:34

有些应用如食谱、地图等,用户并不会频繁与其交互,但偶尔会查看屏幕内容。此时,用户通常不希望屏幕在几分钟后自动进入休眠状态。

以往,用户可能需要每隔几分钟点击一次屏幕,以重置即将进入休眠的计时。而现在,浏览器提供了 Screen Wake Lock API,可以帮助我们有效防止屏幕息屏。

使用起来非常简单,核心就俩方法:

看个完整例子:

// 用一个变量存住 WakeLock 实例,方便后续操作
let wakeLock = null;

// 请求锁屏
async function keepScreenAlive() {
  try {
    // 这行代码就是 Say: "浏览器,给我把屏幕锁住!让它一直处于唤醒/亮着状态"
    wakeLock = await navigator.wakeLock.request('screen');
    console.log('✅ 屏幕唤醒锁已激活,可以放心浪了');

    // 建议监听 release 事件,知道锁什么时候没的(比如被系统自动释放)
    wakeLock.addEventListener('release', () => {
      console.log('⚠️  屏幕唤醒锁已释放,屏幕可能马上要睡了');
      wakeLock = null; // 记得置空,防止内存泄露
    });
  } catch (err) {
    // 错误处理很重要!比如用户拒绝权限,或者浏览器压根不支持
    console.error(`🚨 请求失败: ${err.name}, ${err.message}`);
  }
}

// 手动解锁(比如用户点了个“允许息屏”的按钮)
function letScreenSleep() {
  if (wakeLock !== null) {
    wakeLock.release();
    wakeLock = null;
    console.log('🛑 已手动释放锁,屏幕可以睡了');
  }
}

需要注意的是,当页面处于不可见状态时——例如 用户切换标签页最小化浏览器窗口锁定设备屏幕,这些情况浏览器会自动释放唤醒锁,允许屏幕正常息屏。

如果浏览器窗口保持在前台打开,而其他应用以全屏方式覆盖在浏览器之上,此时不处于页面不可见状态,唤醒锁并不会被自动释放,仍然保持生效状态。

如果应用需要在前台持续加唤醒锁,就得监听页面可见性变化,等页面从不可见状态切回可见状态时,重新把锁给续上。

// 监听页面是显示还是隐藏
document.addEventListener('visibilitychange', async () => {
    // 如果之前有锁,并且页面又变可见了,就重新请求
    if (wakeLock === null && document.visibilityState === 'visible') {
        console.log('👀 用户回来了,赶紧重新把屏幕锁住!');
        await keepScreenAlive();
    }
});

返回首页

本文总阅读量  次
皖ICP备17026209号-3
总访问量: 
总访客量: