ユーザーによる活性化
望ましくない動作が発生した場合にユーザー体験を損なう可能性のある API をアプリケーションが不正利用できないように実現するため、一部の API はユーザーが「活性化した操作」状態にある場合にのみ使用できます。これは、ユーザーが現在ウェブページと操作中であるか、少なくとも一度はページと操作を行った状態を指します。 ブラウザーは、ポップアップ、全画面、バイブレーションなどの機密性の高い API へのアクセスを、アクティブなユーザー操作に制限しています。これにより、悪意のあるスクリプトがこれらの機能を悪用するのを防ぎます。 このページには、ユーザーによる活性化後にのみ利用できるウェブリソースプラットフォームの機能の一覧が掲載されています。
ユーザーによる活性化は、ユーザーが現在ページを操作しているか、ページ読み込み後に操作を完了したかを意味します。 通常、これはボタンクリックやその他の UI 操作を指します。
より正確には、活性化を起こす入力イベント とは以下の条件を満たすイベントです。
isTrusted属性がtrueに設定されており、かつ- 次のいずれかの種類:
-
keydown(ただし、Escキー、ブラウザーが予約しているショートカット、およびキーボードによって異なる特定のキー(Caps Lock、Num Lock、Print Screenなど)は除く。これらのキーはユーザーによる活性化を発生させません。この動作はブラウザーによって異なる場合があります。 -
pointerdown(pointerTypeが "mouse" であるとき) -
pointerup(pointerTypeが "mouse" でないとき)
-
活性化が起きる時、ユーザーエージェントは「持続的」と「一時的」の 2 種類のウインドウのユーザーによる活性化状態を区別します。
一時的な活性化と持続的な活性化の比較
一時的な活性化と持続的な活性化の違いは、一時的な活性化は短時間しか持続せず、保護された機能が使用されている際に消費(非活性化)される場合があるのに対し、持続的な活性化はセッション終了まで維持される点にある。
一時的な活性化による機能のゲート制御は、ユーザーが直接トリガーした場合にのみ機能を利用可能にします。 これに対し、持続的な活性化の主な用途は、ページ読み込み時に自動的に発生すべきでない機能(例:ポップアップ)を制限することです。
一時的な活性化
一時的な活性化は、ユーザーが最近ボタンを押したか、他の何らかの操作をしたことを表すウインドウの状態です。
一時的な活性化は (他の操作によって更新されなければ) タイムアウトによって無効になり、(Window.open() のような) API によって消費されることもあります。
一時的な活性化を必要とする API の例です(すべてではありません)。
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()
持続的な活性化
持続的な活性化は、セッション中にユーザーがボタンを押下した、メニューを使用した、またはその他のユーザー操作を行ったことを示すウィンドウの状態です。 これは、(一時的な活性化と違って)最初にセットされた後はリセットされません。
以下が、持続的な活性化を必要とする API の例です(すべてではありません)。
UserActivation API
ウインドウで持続的または一時的なユーザーによる活性化がなされているかどうかをプログラムから識別するため、 UserActivation API は navigator.userActivation を通じて利用可能な 2 個のプロパティを提供しています。
UserActivation.hasBeenActiveは、ウインドウで持続的な活性化がなされているかを表します。UserActivation.isActiveは、ウインドウで一時的な活性化がなされているかを表します。