一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情。
不常用的浏览器 API 是一个系列文章,计划每天学习一个平时不常用到的 API。这类 API 通常应用于专用领域,解决小部分偏门问题,因此知道的人并不多,学习的收益也不明显。此外还有一个很重要的特点,这部分 API 通常兼容性很差,多为实验性 API,通常只支持高版本 chromium 内核的浏览器(基本上只有 chrome 和 edge 可用)。因此在阅读文章之前注意,如果你的目标产品对浏览器兼容要求较高,这部分基本上不需要懂。这部分 API 适用于对用户体验的需求较高,不需要考虑兼容性的场景。
考虑到内容的特点,这个系列文章会力求精简,用较少的内容讲清楚这个 API 能做什么,怎么用,不会去做深入的解析。达到快速认识了解,在有需要的时候能够第一时间想起来的目的。
本文为不常用的浏览器 API 系列文章第一篇,这一篇来认识一下 Wake Lock API。
功能
Wake Lock API 的主要作用是防止设备锁屏或屏幕变暗。默认场景下如果没有其他处理,用户的设备一定时间后肯定会进入熄屏然后睡眠的状态,对于大部分前端的场景,我们是不需要关注用户是否进入睡眠状态的,因此通常我们永不到这个 API。但是随着前端承载的能力越来越强,有一些情况是需要保持用户屏幕常亮的,一个典型的场景是视频会议,我们是希望用户设备保持不休眠状态的。
使用
我们可以通过 navigator.wakeLock 来获取 WakeLock 对象,WakeLock 上面提供了一个 request 方法,我们需要使用这个方法来获取唤醒锁。request 方法需要传入一个 type 参数来指定类型,目前 type 的值只支持 screen。request 返回一个 Promise 类型,Promise 中会 resolve 一个 WakeLockSentinel 对象。调用 WakeLockSentinel 上的 release 方法可以释放唤醒锁。
举个例子:
navigator.wakeLock.request('screen').then(lock => {
setTimeout(() => lock.release(), 10 * 60 * 1000);
});
这段程序中我们获取了一个唤醒锁并在 10 分钟后释放掉,在这 10 分钟内,系统的屏幕将保持持续唤醒状态。
以上就是 WakeLock API 的相关介绍,有需要屏幕常亮的类似需求时可以考虑使用。注意:由于此 API 影响系统行为,因此只能在安全上下文(HTTPS)中使用。