Benutzeraktivierung
Um sicherzustellen, dass Anwendungen keine APIs missbrauchen, die eine schlechte Benutzererfahrung erzeugen können, wenn das Verhalten nicht erwünscht ist, können einige APIs nur verwendet werden, wenn sich der Benutzer in einem "aktiven Interaktions"-Zustand befindet, was bedeutet, dass der Benutzer derzeit mit der Webseite interagiert oder mindestens einmal mit der Seite interagiert hat. Browser beschränken den Zugriff auf sensible APIs wie Popups, Vollbild- oder Vibrations-APIs auf aktive Benutzerinteraktionen, um zu verhindern, dass bösartige Skripte diese Funktionen missbrauchen. Diese Seite listet Webplattform-Funktionen auf, die nur nach Benutzeraktivierung verfügbar sind.
Eine Benutzeraktivierung impliziert entweder, dass der Benutzer derzeit mit der Seite interagiert oder seit dem Laden der Seite eine Interaktion abgeschlossen hat. Typischerweise ist dies ein Klick auf einen Button oder eine andere Interaktion mit der Benutzeroberfläche.
Genauer gesagt ist ein Aktivierungs-auslösendes Eingabeereignis ein Ereignis, das:
- das Attribut
isTrustedauftruegesetzt hat, und - eines der folgenden Typen ist:
-
keydown(außer der Esc-Taste, Browser-reservierten Tastenkürzeln und bestimmten Tasten, die keine Benutzeraktivierung erzeugen, die je nach Tastatur variieren, wie Caps Lock, Num Lock und Print Screen. Das Verhalten kann je nach Browser variieren.) -
pointerdown(wennpointerType"mouse" ist) -
pointerup(wennpointerTypenicht "mouse" ist)
-
Wenn eine Aktivierung ausgelöst wurde, unterscheidet der Benutzeragent zwischen zwei Arten von Benutzeraktivierungsfensterzuständen: sticky und transient.
Vergleich zwischen transienter und sticky Aktivierung
Der Unterschied zwischen transienter und sticky Aktivierung besteht darin, dass die transiente Aktivierung nur für kurze Zeit anhält und in einigen Fällen verbraucht (deaktiviert) werden kann, wenn eine geschützte Funktion verwendet wird, während die sticky Aktivierung bis zum Ende der Sitzung bestehen bleibt.
Das Einschränken von Funktionen auf transiente Aktivierung stellt sicher, dass sie nur verfügbar sind, wenn sie direkt vom Benutzer ausgelöst werden. Sticky Aktivierung hingegen wird hauptsächlich verwendet, um Funktionen einzuschränken, die nicht automatisch beim Laden der Seite ausgelöst werden sollen, wie beispielsweise Popups.
Transiente Aktivierung
Transiente Aktivierung ist ein Fensterzustand, der anzeigt, dass ein Benutzer kürzlich einen Button gedrückt oder eine andere Benutzerinteraktion durchgeführt hat.
Transiente Aktivierung erlischt nach einer Zeitüberschreitung (wenn sie nicht durch weitere Interaktion erneuert wird) und kann auch von einigen APIs verbraucht werden (wie Window.open()).
APIs, die transiente Aktivierung erfordern (Liste ist nicht erschöpfend):
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()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()
Sticky Aktivierung
Sticky Aktivierung ist ein Fensterzustand, der anzeigt, dass ein Benutzer irgendwann in der Sitzung einen Button gedrückt, ein Menü genutzt oder eine andere Benutzerinteraktion durchgeführt hat. Sie wird nicht zurückgesetzt, nachdem sie initial gesetzt wurde (im Gegensatz zur transienten Aktivierung).
APIs, die sticky Aktivierung erfordern (nicht erschöpfend):
beforeunloadEreignisNavigator.vibrate()VirtualKeyboard.show()- Autoplay der Media- und Web Audio-APIs (insbesondere für
AudioContexts). clipboardchangeEreignisse (diese können auch aktiviert werden, indem der Benutzer die Berechtigungclipboard-readerteilt).
UserActivation API
Um programmatisch zu bestimmen, ob ein Fenster entweder sticky oder transiente Benutzeraktivierung hat, bietet die UserActivation API zwei Eigenschaften, die über navigator.userActivation verfügbar sind:
UserActivation.hasBeenActivegibt an, ob das Fenster eine sticky Benutzeraktivierung hat.UserActivation.isActivegibt an, ob das Fenster eine transiente Benutzeraktivierung hat.