IdleDetector

可用性有限

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

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

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

注意:此功能在 专用 Web Workers 中可用。

IdleDetector 接口是 空闲检测 API 的一部分,它提供了检测设备或屏幕上用户活动的方法和事件。

此接口需要安全上下文。

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(应报告不活动的阈值)和用于中止空闲检测器的 signal(一个 AbortSignal)。

示例

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

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

浏览器兼容性