Używaj interfejsu API wykrywania bezczynności, aby dowiedzieć się, kiedy użytkownik nie używa aktywnie urządzenia.
Czym jest interfejs Idle Detection API?
Interfejs API wykrywania bezczynności informuje deweloperów, gdy użytkownik jest nieaktywny, np. nie korzysta z klawiatury, myszy, ekranu, nie aktywuje wygaszacza ekranu, nie blokuje ekranu ani nie przełącza się na inny ekran. Powiadomienie jest wyzwalane przez próg zdefiniowany przez dewelopera.
Sugerowane przypadki użycia interfejsu Idle Detection API
Przykłady witryn, które mogą korzystać z tego interfejsu API:
- Aplikacje do czatu lub witryny sieci społecznościowych mogą używać tego interfejsu API, aby poinformować użytkownika, czy jego kontakty są obecnie dostępne.
- Publicznie dostępne aplikacje kiosku, np. w muzeach, mogą używać tego interfejsu API, aby wrócić do widoku ekranu głównego, jeśli nikt już z nim nie korzysta.
- Aplikacje, które wymagają kosztownych obliczeń, np. do tworzenia wykresów, mogą ograniczać te obliczenia do sytuacji, w których użytkownik wchodzi w interakcję z urządzeniem.
Obecny stan,
Krok | Stan |
---|---|
1. Utwórz wyjaśnienie | Zakończono |
2. Tworzenie wstępnej wersji specyfikacji | Zakończono |
3. Zbieranie opinii i ulepszanie projektu | W toku |
4. Wersja próbna origin | Gotowe |
5. Wprowadzenie na rynek | Chromium 94 |
Jak korzystać z interfejsu Idle Detection API
Wykrywanie cech
Aby sprawdzić, czy interfejs Idle Detection API jest obsługiwany:
if ('IdleDetector' in window) {
// Idle Detector API supported
}
Pojęcia związane z Idle Detection API
Interfejs API wykrywania bezczynności zakłada, że istnieje pewien poziom zaangażowania między użytkownikiem, agentem użytkownika (czyli przeglądarką) a systemem operacyjnym urządzenia. Jest ona reprezentowana w 2 wymiarach:
- Stan bezczynności użytkownika:
active
lubidle
: użytkownik przez pewien czas nie korzystał z klienta użytkownika. - Stan bezczynności ekranu:
locked
lubunlocked
: system ma aktywną blokadę ekranu (np. wygaszacz), która uniemożliwia interakcję z user agentem.
Odróżnienie active
od idle
wymaga stosowania heurystyki, która może się różnić w zależności od użytkownika, klienta użytkownika i systemu operacyjnego. Musi on być też odpowiednio wysoki (patrz Bezpieczeństwo i uprawnienia).
Model celowo nie rozróżnia formalnie interakcji z określonymi treściami (czyli stroną internetową w karcie korzystającej z interfejsu API), klienta użytkownika jako całości lub systemu operacyjnego; ta definicja jest pozostawiona klientowi użytkownika.
Korzystanie z interfejsu Idle Detection API
Pierwszym krokiem podczas korzystania z interfejsu API wykrywania bezczynności jest upewnienie się, że masz uprawnienie 'idle-detection'
.
Jeśli nie masz uprawnień, poproś o nie za pomocą IdleDetector.requestPermission()
.
Pamiętaj, że wywołanie tej metody wymaga działania użytkownika.
// Make sure 'idle-detection' permission is granted.
const state = await IdleDetector.requestPermission();
if (state !== 'granted') {
// Need to request permission first.
return console.log('Idle detection permission not granted.');
}
Drugim krokiem jest utworzenie instancji klasy IdleDetector
.
Minimalna wartość parametru threshold
to 60 tys. milisekund (1 minuta).
Możesz w końcu rozpocząć wykrywanie bezczynności, wywołując metodę IdleDetector
start()
.
Jako parametry przyjmuje obiekt z pożądanym czasem bezczynności threshold
w milisekundach oraz opcjonalny obiekt signal
z AbortSignal
, aby przerwać wykrywanie bezczynności.
try {
const controller = new AbortController();
const signal = controller.signal;
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: 60000,
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);
}
Możesz przerwać wykrywanie bezczynności, wywołując metodę AbortController
abort()
.
controller.abort();
console.log('IdleDetector is stopped.');
Wsparcie dotyczące Narzędzi deweloperskich
Od wersji Chromium 94 możesz emulować zdarzenia bezczynności w Narzędziach dla programistów bez faktycznego bezczynności. W Narzędziach deweloperskich otwórz kartę Czujniki i znajdź opcję Emuluj stan nieaktywnego detektora. Poniżej znajdziesz film z różnymi opcjami.
Wsparcie dotyczące Puppeteer
Od wersji 5.3.1 Puppeteer możesz emulować różne stany bezczynności, by automatycznie testować, jak zmienia się działanie Twojej aplikacji internetowej.
Prezentacja
Możesz zobaczyć, jak działa interfejs Idle Detection API, korzystając z wersji demonstracyjnej kanw tymczasowych, która usuwa zawartość po 60 sekundach bezczynności. Można sobie wyobrazić, że takie rozwiązanie jest używane w dziale sklepu, gdzie dzieci mogą rysować.
wypełnianie treścią zastępczą,
Niektóre aspekty interfejsu Idle Detection API to biblioteki polyfillable i do wykrywania bezczynności, takie jak idle.ts, ale te rozwiązania są ograniczone do obszaru treści aplikacji internetowej: biblioteka działająca w kontekście aplikacji internetowej musi kosztować kosztowne sondowanie w poszukiwaniu zdarzeń wejściowych lub nasłuchiwanie zmian widoczności. Co więcej, biblioteki nie mogą obecnie określić, kiedy użytkownik przestaje korzystać z ich treści (np. gdy korzysta z innej karty lub wyloguje się z komputera).
Zabezpieczenia i uprawnienia
Zespół Chrome zaprojektował i wdrożył interfejs Idle Detection API zgodnie z podstawowymi zasadami określonymi w artykule Kontrola dostępu do zaawansowanych funkcji platformy internetowej, takimi jak kontrola użytkownika, przejrzystość i ergonomia.
Możliwość korzystania z tego interfejsu API jest kontrolowana przez uprawnienie 'idle-detection'
.
Aby korzystać z interfejsu API, aplikacja musi też działać w bezpiecznym kontekście najwyższego poziomu.
Kontrola użytkownika i prywatność
Zawsze chcemy zapobiegać złośliwemu wykorzystywaniu nowych interfejsów API. Witryny pozornie niezależne, które w istocie są kontrolowane przez ten sam podmiot, mogą uzyskiwać informacje o nieaktywnych użytkownikach i wykorzystywać te dane do identyfikowania unikalnych użytkowników z różnych źródeł. Aby ograniczyć tego typu ataki, interfejs API wykrywania bezczynności ogranicza szczegółowość zgłaszanych zdarzeń bezczynności.
Prześlij opinię
Zespół Chrome chce poznać Twoje wrażenia związane z interfejsem API wykrywania bezczynności.
Prześlij informacje o projektowaniu interfejsu API
Czy coś w interfejsie API nie działa zgodnie z oczekiwaniami? A może brakuje metod lub właściwości, których potrzebujesz do wdrożenia swojego pomysłu? Masz pytania lub uwagi dotyczące modelu zabezpieczeń? Zgłoś problem ze specyfikacją w odpowiednim repozytorium GitHub lub dodaj swoje uwagi do istniejącego problemu.
Zgłaszanie problemów z implementacją
Czy znalazłeś/znalazłaś błąd w implementacji Chrome? A może implementacja różni się od specyfikacji?
Zgłoś błąd na stronie new.crbug.com. Podaj jak najwięcej szczegółów,
proste instrukcje odtwarzania i wpisz Blink>Input
w polu Komponenty.
Glitch to świetne narzędzie do szybkiego i łatwego udostępniania informacji o powtarzających się problemach.
Pokaż informacje o pomocy dotyczącej interfejsu API
Zamierzasz używać interfejsu Idle Detection API? Twoja publiczna pomoc pomaga zespołowi Chrome ustalać priorytety funkcji i pokazuje innym dostawcom przeglądarek, jak ważne jest wspieranie tych funkcji.
- Daj znać, jak zamierzasz korzystać z tego narzędzia w wątku poświęconym dysku WICG.
- Wyślij tweeta na adres @ChromiumDev, używając hashtagu
#IdleDetection
, i daj nam znać, gdzie i jak go używasz.
Przydatne linki
- Publiczne wyjaśnienie
- Specyfikacja robocza
- Prezentacja interfejsu Ile Detection API | Źródło demonstracyjne interfejsu Ile Detection API
- Śledzenie błędu
- Wpis na stronie ChromeStatus.com
- Składnik Blink:
Blink>Input
Podziękowania
Interfejs Idle Detection API został zaimplementowany przez Sam Goto. Obsługa w Narzędziach deweloperskich została dodana przez Maksima Sadyma. Dziękujemy Joe Medley, Kayce Basques i Reilly Grant za opinię o tym artykule. Obraz główny autorstwa Fernando Hernandeza z Unsplash.