ユーザーによる有効化によって制御される機能
挙動が望むものでないとき悪いユーザー体験をもたらす API をアプリケーションに濫用させないため、ユーザーが「アクティブに操作中」の状態、すなわちユーザーが現在ウェブページを操作しているか、もしくは少なくとも 1 回ページを操作したか、のときのみ使用可能な API があります。ブラウザーは、悪意のあるスクリプトがこれらの機能を濫用するのを防ぐため、ポップアップ、フルスクリーン、振動などの機微な API へのアクセスを制限します。このページでは、ユーザーによる有効化の後にのみ利用可能になるウェブプラットフォームの機能を挙げています。
ユーザーによる有効化は、ユーザーが最近ページを操作した、またはページを読み込んでから操作を完了したことを表します。通常、これはボタンのクリックや他の UI の操作です。
より正確には、有効化を起こす入力イベント とは以下の条件を満たすイベントです。
isTrusted属性がtrueに設定されており、かつ- 以下の種類のイベントである
keydown(Esc およびユーザーエージェントによって予約されているショートカットキーを除く)mousedownpointerdown(pointerTypeが "mouse" であるとき)pointerup(pointerTypeが "mouse" でないとき)touchend
有効化が起きる時、ユーザーエージェントは「粘着的」と「一時的」の 2 種類のウインドウのユーザーによる有効化状態を区別します。
一時的な有効化
一時的な有効化は、ユーザーが最近ボタンを押したか、マウスを動かしたか、メニューを使用したか、他の何らかの操作をしたことを表すウインドウの状態です。一時的な有効化は (他の操作によって更新されなければ) タイムアウトによって無効になり、(Window.open() のような) API によって消費されることもあります。
以下が、一時的な有効化を必要とする API の例です。
beforeunloadイベントClipboard.read()Clipboard.readText()Clipboard.writeText()Document.requestStorageAccess()Element.requestFullScreen()Element.requestPointerLock()GPUAdapter.requestAdapterInfo()HID.requestDevice()HTMLInputElement.showPicker()HTMLVideoElement.requestPictureInPicture()(en-US)IdleDetector.requestPermission()(en-US)MediaDevices.selectAudioOutput()MediaStreamTrack.sendCaptureAction()MediaDevices.getViewportMedia()MediaDevices.getDisplayMedia()Navigator.share()PaymentRequest.show()PresentationRequest.start()(en-US)RemotePlayback.prompt()(en-US)USB.requestDevice()Keyboard.lock()(en-US)Window.open()Window.showOpenFilePicker()Window.showSaveFilePicker()Window.showDirectoryPicker()Window.getScreenDetails()Window.queryLocalFonts()XRSystem.requestSession()(en-US)
粘着的な有効化
粘着的な有効化は、ユーザーがボタンを押したか、マウスを動かしたか、メニューを使用したか、他の何らかの操作をしたことを表すウインドウの状態です。これは、(一時的な有効化と違って) 最初にセットされた後はリセットされません。
以下が、粘着的な有効化を必要とする API の例です。
Navigator.vibrate()navigator.getAutoplayPolicy()navigator.virtualKeyboard.show()
UserActivation API
ウインドウで粘着的または一時的なユーザーによる有効化がなされているかどうかをプログラムから識別するため、UserActivation API は navigator.userActivation を通じて利用可能な 2 個のプロパティを提供しています。
UserActivation.hasBeenActiveは、ウインドウで粘着的な有効化がなされているかを表します。UserActivation.isActiveは、ウインドウで一時的な有効化がなされているかを表します。