이 문서는 브라우저가 제공하는 아이드롭퍼에 접근할 수 있는 API에 대해 설명합니다.
현재 웹에서는, 개발자가 화면의 픽셀(웹 페이지 외부에 렌더링된 픽셀을 포함)에서 사용자가 색상을 선택할 수 있게 하는 아이드롭퍼 도구를 구현하기 어렵습니다.
이 API는 저자가 브라우저 제공 아이드롭퍼를 사용하여 맞춤형 색상 선택기를 구축할 수 있게 합니다.
dictionary ColorSelectionResult { DOMString sRGBHex; };
dictionary ColorSelectionOptions { AbortSignal signal; };
[Exposed=Window, SecureContext] interface EyeDropper { constructor(); Promise<ColorSelectionResult> open(optional ColorSelectionOptions options = {}); };
{{EyeDropper/open}}로 아이드롭퍼를 열기 위해, 사용자 에이전트는 다음 규칙을 따르는 사용자 인터페이스를 제공해야 합니다:
개발자가 사용자의 기기에서 제한 없는 픽셀 데이터에 접근할 수 있는 엔드포인트를 노출하는 것은 보안 문제를 야기합니다. 특히, 아이드롭퍼 구현은 사용자가 의도하지 않은 정보를 웹 페이지가 "스크린 스크래핑(screen scrape)"하지 못하도록 해야 합니다. 예를 들어 사용자가 화면 위에서 마우스를 움직이는 동안 의도치 않은 정보가 수집되지 않아야 합니다.
이 위협을 완화하는 한 방법은 픽셀 데이터를 웹 애플리케이션에 제공하기 위해 사용자가 마우스 버튼을 누르는 등의 명시적 동작을 수행해야 하도록 요구하는 것입니다.
또한, 브라우저는 사용자가 아이드롭퍼 모드로 전환되었음을 명확히 알릴 수 있어야 합니다. 예를 들어 커서를 변경하고 사용자가 ESC 키를 눌러 해당 모드를 종료할 수 있도록 하는 등의 수단을 제공해야 하며, 저자가 이를 취소할 수 없도록 해야 합니다.
사용자가 색상을 선택할 수 있도록 허용하기 전에 브라우저는 사용자가 UI를 볼 수 있는 기회를 제공했는지 확인해야 합니다. 이는 아이드롭퍼를 연 후 색상 선택을 허용하기까지 최소 시간 간격을 강제함으로써 달성될 수 있습니다.
아이드롭퍼 모드로의 전환은 소비 가능한 사용자 활성화(consumable user activation)를 요구해야 합니다. 예를 들어 웹 페이지의 버튼을 클릭하도록 요구함으로써 의도치 않게 픽셀 데이터가 노출되는 것을 방지할 수 있습니다.