Benutzeraktivierung
Damit Anwendungen APIs, die bei unerwünschter Verwendung das Nutzungserlebnis beeinträchtigen können, nicht missbrauchen, lassen sich manche APIs nur verwenden, wenn eine Benutzeraktivierung vorliegt. Das bedeutet, dass eine Person gerade mit der Webseite interagiert oder seit dem Laden der Seite mindestens einmal mit ihr interagiert hat. Browser beschränken den Zugriff auf sensible APIs, etwa für Pop-ups, den Vollbildmodus oder Vibrationen, auf solche Benutzerinteraktionen. So verhindern sie, dass schädliche Skripte diese Funktionen missbrauchen. Diese Seite listet Funktionen der Webplattform auf, die erst nach einer Benutzeraktivierung verfügbar sind.
Eine Benutzeraktivierung bedeutet entweder, dass eine Person gerade mit der Seite interagiert oder seit dem Laden der Seite eine Interaktion abgeschlossen hat. Typischerweise ist das ein Klick auf eine Schaltfläche oder eine andere Interaktion mit der Benutzeroberfläche.
Genauer gesagt ist ein aktivierungsauslösendes Eingabeereignis ein Ereignis, das:
- dessen Attribut
isTrustedauftruegesetzt ist und - einem der folgenden Typen entspricht:
-
keydown(ausgenommen die Taste Esc, vom Browser reservierte Tastenkombinationen und bestimmte Tasten, die keine Benutzeraktivierung auslösen und je nach Tastatur variieren, etwa Caps Lock, Num Lock und Print Screen. Das Verhalten kann je nach Browser unterschiedlich sein.) -
pointerdown(wennpointerType„mouse“ ist) -
pointerup(wennpointerTypenicht „mouse“ ist)
-
Wenn eine Aktivierung ausgelöst wurde, unterscheidet der User Agent zwischen zwei Zuständen der Benutzeraktivierung für ein Fenster: dauerhafte und vorübergehende Aktivierung.
Vergleich zwischen vorübergehender und dauerhafter Aktivierung
Der Unterschied besteht darin, dass eine vorübergehende Aktivierung nur kurze Zeit anhält und in manchen Fällen durch die Nutzung einer geschützten Funktion aufgebraucht (deaktiviert) werden kann. Eine dauerhafte Aktivierung bleibt dagegen bis zum Ende der Sitzung bestehen.
Wenn Funktionen eine vorübergehende Aktivierung voraussetzen, sind sie nur verfügbar, wenn sie unmittelbar durch eine Benutzerinteraktion ausgelöst werden. Eine dauerhafte Aktivierung dient hingegen vor allem dazu, Funktionen einzuschränken, die nicht automatisch beim Laden der Seite ausgelöst werden sollten, etwa Pop-ups.
Vorübergehende Aktivierung
Eine vorübergehende Aktivierung ist ein Fensterzustand, der anzeigt, dass eine Person kürzlich eine Schaltfläche gedrückt oder eine andere Benutzerinteraktion ausgeführt hat.
Sie läuft nach einer bestimmten Zeit ab, sofern sie nicht durch eine weitere Interaktion erneuert wird, und kann auch von manchen APIs (wie Window.open()) aufgebraucht werden.
APIs, die eine vorübergehende Aktivierung erfordern (Liste nicht vollständig):
Clients.openWindow()Clipboard.read()Clipboard.readText()Clipboard.write()Clipboard.writeText()ContactsManager.select()Document.requestStorageAccess()DocumentPictureInPicture.requestWindow()Element.requestFullScreen()Element.requestPointerLock()EyeDropper.open()HID.requestDevice()HTMLInputElement.showPicker()HTMLSelectElement.showPicker()HTMLVideoElement.requestPictureInPicture()IdleDetector.requestPermission()Keyboard.lock()LanguageModel.create()MediaDevices.getDisplayMedia()MediaDevices.getViewportMedia()MediaDevices.selectAudioOutput()MediaStreamTrack.sendCaptureAction()Navigator.share()PaymentRequest.show()PresentationRequest.start()RemotePlayback.prompt()Serial.requestPort()USB.requestDevice()Window.getScreenDetails()Window.open()Window.queryLocalFonts()Window.showDirectoryPicker()Window.showOpenFilePicker()Window.showSaveFilePicker()WindowClient.focus()XRSystem.requestSession()
Dauerhafte Aktivierung
Eine dauerhafte Aktivierung ist ein Fensterzustand, der anzeigt, dass eine Person irgendwann während der Sitzung eine Schaltfläche gedrückt, ein Menü verwendet oder eine andere Benutzerinteraktion ausgeführt hat. Anders als eine vorübergehende Aktivierung wird sie nach ihrer erstmaligen Auslösung nicht zurückgesetzt.
APIs und Funktionen, die eine dauerhafte Aktivierung erfordern (Liste nicht vollständig):
beforeunload-EreignisNavigator.vibrate()VirtualKeyboard.show()- Automatische Wiedergabe der Media- und Web-Audio-APIs (insbesondere für
AudioContexts). clipboardchange-Ereignisse (diese können auch aktiviert werden, wenn die Person die Berechtigungclipboard-readerteilt).
UserActivation API
Um programmatisch festzustellen, ob für ein Fenster eine dauerhafte oder vorübergehende Benutzeraktivierung vorliegt, stellt die UserActivation API zwei Eigenschaften bereit, die über navigator.userActivation zugänglich sind:
UserActivation.hasBeenActivegibt an, ob für das Fenster eine dauerhafte Benutzeraktivierung vorliegt.UserActivation.isActivegibt an, ob für das Fenster eine vorübergehende Benutzeraktivierung vorliegt.