eyedropper api 仅 chromium 内核浏览器(chrome≥113、edge≥113、opera≥99)原生支持,firefox 和 safari 不支持;需先检测 navigator?.eyedropper 是否存在,调用须在用户手势事件中且 iframe 需加 allow="eyedropper" 属性。

EyeDropper API 在 Chrome 113+ 才能用
不是所有浏览器都支持 EyeDropper,目前仅 Chromium 内核(Chrome ≥113、Edge ≥113、Opera ≥99)原生支持,Firefox 和 Safari 完全没实现,navigator.eyeDropper 在它们里面是 undefined。别在项目里直接 new EyeDropper() 就开干,先做兼容判断。
实操建议:
- 用
if ('EyeDropper' in window)或更稳妥的if (navigator?.eyeDropper)检查可用性 - 不支持时 fallback 到手动输入 HEX / RGB 的表单,或 canvas 像素采样(但后者不能跨域取色)
- 注意:即使 Chrome 113+,在 iframe 里调用也需
allow="eyedropper"属性,否则抛SecurityError
new EyeDropper().open() 返回的是 Promise
EyeDropper.open() 不是同步方法,它会弹出系统级取色光标,用户点击后才 resolve,失败则 reject。常见错误是把它当普通函数调用,忘了 await 或 .then()。
实操建议:
- 必须用
await或.then()处理返回值,例如:const result = await eyeDropper.open() - result 是形如
{sRGBHex: "#ff5733"}的对象,只有sRGBHex字段,没有 rgb、hsl 等其他格式 - 用户取消操作(ESC 或点空白处)会触发 reject,错误类型是
AbortError,不是TypeError,捕获时注意区分
不能自动触发,必须由用户手势启动
浏览器强制要求 EyeDropper.open() 必须在用户交互事件(如 click、pointerdown)的处理函数中调用,否则抛 NotAllowedError。想在页面加载后自动唤起?不行。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
实操建议:
- 绑定到按钮的
click事件最稳妥,避免用setTimeout延迟调用 - 不要在
input、change等非显式触发事件里调;也不要放在DOMContentLoaded回调里 - 如果需要多次取色,每次都要重新 new 一个
EyeDropper实例 —— 实例不可复用
iframe 场景下要加 allow 属性
如果页面嵌在 iframe 里(比如 CodePen、微前端子应用),即使浏览器支持,EyeDropper.open() 也会因权限不足失败,报错信息是 NotAllowedError: Permission denied。
实操建议:
- 外层 iframe 标签必须带
allow="eyedropper",例如:<iframe src="..." allow="eyedropper"></iframe> - 若 iframe 是 sandboxed,还需加上
allow-scripts,否则 JS 都执行不了,更别说调 API - 本地 file:// 协议下测试也会失败,必须走 http/https(哪怕 localhost)
真正麻烦的不是怎么写那三行代码,而是得时刻想着:用户用什么浏览器、页面在哪跑、谁在触发、有没有跨域或 sandbox 限制——这些地方漏一个,EyeDropper 就静默失效。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










