一位开发者在为其名为 Whisk 的 AI 图像处理平台进行浏览器兼容性测试时,遭遇了 Safari 环境下特有的技术障碍。问题表现为在 macOS 环境下,用户从访达或照片应用拖拽图片至网页 Drop 区域时,偶发无法获取文件内容(`dataTransfer.files` 为空),且控制台无任何报错,呈现出高度的随机性与隐蔽性。经过深入排查,该问题被定位为两个因素叠加所致:首先是 Safari 对 `dragover` 事件的默认行为拦截机制比 Chrome 严格得多,若未显式执行 `preventDefault()`,Safari 将拒绝在 `drop` 事件中传递文件数据;其次,当数据源来自 macOS 自带的“照片”App 时,系统传输的是特殊的 Promise 文件对象,无法通过标准的 `files` 属性直接获取,必须通过遍历 `dataTransfer.items` 并调用 `getAsFile()` 方法才能成功读取。这一发现不仅解决了开发者的燃眉之急,也填补了现有技术社区关于 Safari 与系统级应用交互文档的空白。
事件分析
💡 核心观点:浏览器生态的碎片化与底层 API 实现的差异,已成为制约高交互性 AI Web 应用开发效率与稳定性的隐形壁垒。
原文链接:V2EX 分享发现





