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

瀏覽器相容性