术语表
Idle Detection API
浏览器原生提供的 Web API,允许 Web 应用检测用户是否处于空闲状态(无键盘鼠标操作)以及屏幕是否被锁定。该 API 直接与操作系统交互,提供系统级的状态感知能力,无需依赖 JavaScript 事件监听。目前仅在 Chromium 内核浏览器中受支持。
用户状态(User State)
Idle Detection API 返回的两个状态维度之一,表示用户是否在与设备交互。值为 active(活跃,有键盘或鼠标操作)或 idle(空闲,超过阈值无操作)。用户状态独立于屏幕状态,两者可以自由组合产生四种状态模式。
屏幕状态(Screen State)
Idle Detection API 返回的另一个状态维度,表示屏幕是否处于锁定状态。值为 unlocked(未锁定,用户可见屏幕内容)或 locked(已锁定,屏幕被系统锁屏保护)。屏幕状态独立于用户状态,反映的是操作系统的屏幕锁定事件。
空闲阈值(Threshold)
判断用户是否空闲的时间阈值,以毫秒为单位。用户停止所有输入操作后,若持续时间超过该阈值,则用户状态变为 idle。浏览器强制要求阈值不低于 60000 毫秒(60 秒),这是隐私保护机制的一部分,防止网站通过极短阈值频繁监控用户行为。
权限(Permission)
使用 Idle Detection API 前必须获得用户明确授权。权限状态有三种:granted(已授权,可以使用 API)、denied(已拒绝,无法使用)、prompt(待决定,首次调用时显示权限弹窗)。权限可随时在浏览器设置中撤销,撤销后需重新请求。
安全上下文(Secure Context)
Idle Detection API 要求页面运行在安全上下文中,即通过 HTTPS 提供服务或在 localhost 下运行。HTTP 页面无法使用该 API,这是浏览器的基本安全要求,确保敏感的用户状态数据不会在不安全的网络传输中被截获或篡改。
AbortController
Web API 中用于取消异步操作的控制器。在 Idle Detection 场景中,通过 AbortController 的 abort() 方法可以优雅地停止空闲检测,释放系统资源,防止内存泄漏。推荐在组件卸载或不需要检测时调用,是管理 API 生命周期的标准方式。
降级方案(Fallback)
当浏览器不支持 Idle Detection API 时,回退到传统的事件监听方式(如监听 mousemove、keydown、scroll 等事件并结合 setTimeout 定时器判断空闲)。降级方案无法检测屏幕锁定状态,但可以提供基本的空闲感知能力,确保应用在所有浏览器中都能正常运行。
特性检测(Feature Detection)
在使用 API 前先检查浏览器是否支持该功能,而非通过用户代理字符串(UA)判断浏览器类型。对于 Idle Detection API,推荐使用 'IdleDetector' in window 进行特性检测,确保代码健壮性。特性检测是 Web 开发中的最佳实践之一,能够有效避免运行时错误。
UD5工具箱