本書は、ブラウザが提供するスポイト(Eyedropper)にアクセスするためのAPIについて説明します。
現在のウェブでは、クリエイティブなアプリ開発者がスポイト(ユーザーが画面上のピクセルから色を選択できるツール)を実装することができません。これには、ウェブページの外側にレンダリングされたピクセルも含まれます。
本APIにより、作者はカスタム色選択ツールを構築する際にブラウザ提供のスポイトを利用できるようになります。
dictionary ColorSelectionResult { DOMString sRGBHex; };
dictionary ColorSelectionOptions { AbortSignal signal; };
[Exposed=Window, SecureContext] interface EyeDropper { constructor(); Promise<ColorSelectionResult> open(optional ColorSelectionOptions options = {}); };
{{EyeDropper/open}} を呼び出す際、ユーザーエージェントは以下のルールに従うユーザーインターフェイスを提示する必要があります:
開発者がユーザーのマシンから制限のないピクセルデータにアクセスできるようにすることは、セキュリティ上の課題をもたらします。 特に、スポイトの実装は、ユーザーがウェブアプリケーションと共有する意図のない情報(例えば、ユーザーが画面上をマウスで移動している間に得られるスクリーンの内容など)をウェブページが "スクリーンスクレイピング" することを許してはなりません。
この脅威を軽減する1つの方法は、ピクセルデータがユーザーによる明示的なアクション(例えばマウスボタンの押下)のときのみウェブアプリケーションに提供されるようにすることです。
加えて、ブラウザはユーザーがスポイトモードに遷移したときにそれが分かる明確な表示(例えばカーソルの変更)を提供し、ユーザーがそのモードを終了できる手段(例えば ESC キーによる終了)を提供するべきです。作者によってキャンセルできないようにする必要があります。
ユーザーが色を選択する前に、ブラウザはユーザーがUIを確認する機会を持てることを保証すべきです。これはスポイトを開いてから色選択を許可するまでの最小時間間隔を強制することで実現できるかもしれません。
スポイトモードへの遷移は消費可能なユーザーアクティベーション(例えばページ上のボタンをクリックすること)を要求すべきであり、意図せずピクセルデータを露出しないようにします。