Kimi WebBridge 文件上传回退:解决 Chrome CDP Not allowed
技术 5

Chrome 扩展式 CDP · 文件上传兼容记录

为 Chrome 扩展模式补上可靠的文件上传回退

当扩展式 CDP 调用 DOM.setFileInputFiles 返回 -32000 Not allowed 时,改用分块 Base64、File、DataTransfer 和标准表单事件完成上传控件注入。

问题是什么

Kimi WebBridge 可以控制用户当前 Chrome 会话,但扩展通过 chrome.debugger 连接页面时,Chrome 可能拒绝直接把本地文件路径写入 <input type="file">。这个错误与目标网站、React、隐藏控件或 CSS 选择器无关;在只有一个标准文件控件的最小页面中也可以稳定复现。

{"code":-32000,"message":"Not allowed"}

新的回退链路

  1. 仍然优先调用 WebBridge 原生 upload
  2. 仅在明确收到 -32000 Not allowed 时启用回退。
  3. 把本地文件按固定大小编码为 Base64 分块,逐段传入页面。
  4. 在浏览器上下文中还原字节并创建标准 File 对象。
  5. 通过 DataTransfer 生成 FileList 并赋给文件控件。
  6. 触发可冒泡的 inputchange 事件,让普通前端组件继续原有上传逻辑。

实测结果

在本地 HTTP 最小页面中,原生上传稳定返回 Not allowed;相同控件使用页面注入回退后,文件名、大小和 MIME 均正确,页面成功收到 change 事件。

{"success":true,"fileCount":1,"files":[{"name":"sample.txt","size":23,"type":"text/plain"}]}

安全边界

  • 默认总文件大小限制为 25 MB,避免 Base64 与浏览器字节数组造成过高内存占用。
  • 仅适用于顶层页面中可通过 CSS 选择器定位的标准文件控件。
  • 不会自动提交表单,也不会点击最终发布按钮;注入后必须检查页面反馈。
  • 跨域 iframe、必须依赖可信原生文件选择器的网站,以及大文件上传仍应优先使用网站正式 API。
  • 失败后不会反复调用相同的 DOM.setFileInputFiles

方案定位

这是一项本地验证过的兼容回退,可作为问题复现、上游修复讨论或私有环境临时处理的参考。它不应以原项目名义重新分发;如需长期采用,应向原作者提交问题报告或补丁建议,并遵守原项目的许可与贡献规则。

这次修复的重点不是绕过浏览器安全机制,而是在原生扩展上传受到限制时,为普通网页文件控件提供一个有大小限制、可验证、可停止的兼容路径。

Kimi WebBridge 文件上传回退:解决 Chrome CDP Not allowed
https://www.quietphoenix.top/archives/kimi-webbridge-file-upload-fallback
作者
QuietPhoenix
发布于
更新于
许可