空闲检测器

有限可用性

此功能不是基线,因为它在一些最广泛使用的浏览器中不起作用。

安全上下文: 此功能仅在安全上下文(HTTPS)中,在部分或所有支持的浏览器中可用。

实验性: 这是一个实验性技术
在生产环境中使用之前,请仔细检查浏览器兼容性表

空闲检测 APIIdleDetector 接口提供用于检测设备或屏幕上的用户活动的方法和事件。

此接口需要安全上下文。

EventTarget IdleDetector

构造函数

IdleDetector() 实验性

创建一个新的 IdleDetector 对象。

实例属性

IdleDetector.userState 只读 实验性

返回一个字符串,指示用户是否在提供给 start() 的阈值内与屏幕或设备交互,可以是 "active""idle"。在调用 start() 之前,此属性返回 null

IdleDetector.screenState 只读 实验性

返回一个字符串,指示屏幕是否已锁定,可以是 "locked""unlocked"。在调用 start() 之前,此属性返回 null

事件

change 实验性

userStatescreenState 的值发生改变时调用。

静态方法

IdleDetector.requestPermission() 实验性

返回一个Promise,该 Promise 在用户选择是否授予来源对其空闲状态的访问权限时解析。在接受时解析为 "granted",在拒绝时解析为 "denied"

实例方法

IdleDetector.start() 实验性

返回一个 Promise,该 Promise 在检测器开始监听用户空闲状态变化时解析。userStatescreenState 被赋予初始值。此方法接受一个可选的 options 对象,该对象包含应报告非活动状态的 threshold(以毫秒为单位)和用于 AbortSignalsignal,以中止空闲检测器。

示例

以下示例展示了如何创建一个检测器并记录用户空闲状态的变化。一个按钮用于在请求权限之前获得必要的用户激活。

js
const controller = new AbortController();
const signal = controller.signal;

startButton.addEventListener("click", async () => {
  if ((await IdleDetector.requestPermission()) !== "granted") {
    console.error("Idle detection permission denied.");
    return;
  }

  try {
    const idleDetector = new IdleDetector();
    idleDetector.addEventListener("change", () => {
      const userState = idleDetector.userState;
      const screenState = idleDetector.screenState;
      console.log(`Idle change: ${userState}, ${screenState}.`);
    });

    await idleDetector.start({
      threshold: 60_000,
      signal,
    });
    console.log("IdleDetector is active.");
  } catch (err) {
    // Deal with initialization errors like permission denied,
    // running outside of top-level frame, etc.
    console.error(err.name, err.message);
  }
});

stopButton.addEventListener("click", () => {
  controller.abort();
  console.log("IdleDetector is stopped.");
});

规范

规范
空闲检测 API
# api-idledetector

浏览器兼容性

BCD 表格仅在浏览器中加载