Kimi WebBridge 文件上传回退:解决 Chrome CDP Not allowed
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"}
新的回退链路
- 仍然优先调用 WebBridge 原生
upload。 - 仅在明确收到
-32000 Not allowed时启用回退。 - 把本地文件按固定大小编码为 Base64 分块,逐段传入页面。
- 在浏览器上下文中还原字节并创建标准
File对象。 - 通过
DataTransfer生成FileList并赋给文件控件。 - 触发可冒泡的
input与change事件,让普通前端组件继续原有上传逻辑。
实测结果
在本地 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