这篇文章专门讲在桌面端 Chrome 里用 navigator.wakeLock 申请并安全释放屏幕唤醒锁的完整流程,重点帮你避开那个坑死人的 wakeLock.release is not a function 报错——说穿了,就是搞混了 Promise 对象和真正的 WakeLock 实例。 W
这篇文章专门讲在桌面端 Chrome 里用 navigator.wakeLock 申请并安全释放屏幕唤醒锁的完整流程,重点帮你避开那个坑死人的 wakeLock.release is not a function 报错——说穿了,就是搞混了 Promise 对象和真正的 WakeLock 实例。
Web Wake Lock API 的出现,让网页在用户处于活跃标签页时能阻止设备休眠(比如屏幕变暗或者系统直接睡过去),视频播放、PPT演示、远程监控这类场景都离不开它。但它的调用方式有个很容易踩的坑:navigator.wakeLock.request('screen') 返回的是一个 Promise,而不是立即可用的 WakeLock 对象。如果你拿到 Promise 就直愣愣地调用 .release(),那肯定报 is not a function——冤得很。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
正确做法其实就一句话:先 await 拿到实际的 WakeLock 实例,再对那个实例调用 .release()。下面这段代码是经过实战验证的健壮写法:
let wakeLock = null;
// 申请屏幕唤醒锁(必须在用户交互或安全上下文中调用)
async function requestWakeLock() {
try {
if ('wakeLock' in navigator) {
wakeLock = await navigator.wakeLock.request('screen');
console.log(' Screen wake lock acquired');
// 可选:监听释放事件(比如被系统强制释放时)
wakeLock.addEventListener('release', () => {
console.log(' Wake lock was released (e.g., tab blurred or system override)');
wakeLock = null;
});
} else {
console.warn(' Wake Lock API not supported');
}
} catch (err) {
console.error(' Failed to acquire wake lock:', err.name, err.message);
}
}
// 安全释放唤醒锁
async function releaseWakeLock() {
if (!wakeLock) return;
try {
await wakeLock.release(); // 直接 await release() —— 它本身返回 Promise
console.log(' Wake lock released');
wakeLock = null;
} catch (err) {
console.warn(' Release failed (may already be released):', err.message);
}
}
// 示例:用户点击按钮触发
document.getElementById('lock-btn').addEventListener('click', requestWakeLock);
document.getElementById('unlock-btn').addEventListener('click', releaseWakeLock);
navigator.wakeLock 直接是 undefined,连调都没法调;wakeLock.release() 是异步方法,老老实实 await 调用,别偷懒忽略返回值;await 的 Promise(比如某个 requestWakeLock() 的返回值)直接调用 .release() —— 这是绝大多数 is not a function 错误的根源;navigator.wakeLock 是否可用,并且捕获 NotAllowedError(权限拒绝)、NotSupportedError 等异常;beforeunload)或标签页失焦(visibilitychange)时自动释放锁,避免资源泄漏。按照上面这套模式来写,在 Windows Chrome 这类支持 Wake Lock 的桌面浏览器里,就能稳稳当当地控制屏幕唤醒行为,后续维护也省心。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述