chrome.downloads.onCreated报错 Chrome浏览器插件开发问题排查
问题原因
报错的核心原因有两个:
- 权限配置位置错误:
permissions是Manifest V3的顶级配置字段,你当前把它写在了content_scripts的单个脚本配置项内,Chrome无法识别到你申请的downloads权限。 - 脚本运行上下文不匹配:
chrome.downloads属于高权限扩展API,仅能在扩展自有上下文(后台Service Worker、扩展弹窗、选项页)中调用。你把监听逻辑写在了作为内容脚本(content script)的main.js里,内容脚本是注入到普通网页上下文运行的,本身就没有访问downloadsAPI的权限,此时chrome.downloads值为undefined,读取onCreated属性自然会抛出类型错误。
解决步骤
- 修正Manifest配置文件,将
permissions移到顶级配置层级,同时新增后台Service Worker配置,用来存放需要高权限的API调用逻辑。修正后的Manifest示例:
{ "manifest_version": 3, "version": "1.0", "name": "Test", "permissions": ["downloads"], "background": { "service_worker": "background.js" }, "content_scripts": [ { "matches": ["<all_urls>"], "js": ["main.js"] } ] }
- 新建
background.js文件,把原来写在main.js里的下载事件监听逻辑移到这个文件中:
function handleCreated(item) { console.log(item); } chrome.downloads.onCreated.addListener(handleCreated);
- 移除
main.js里原来的chrome.downloads.onCreated相关监听代码。如果后续需要从内容脚本触发下载相关操作,不要直接在内容脚本调用downloads API,通过扩展消息通信机制把操作指令发送给后台Service Worker,由后台完成API调用即可。 - 打开Chrome扩展管理页(地址栏输入
chrome://extensions/),找到你的扩展点击重新加载按钮,让新配置生效。如果要查看background.js的日志输出,点击扩展卡片上的「Service Worker」链接即可打开后台上下文的开发者工具,不要在普通网页的控制台查找后台脚本日志。
内容的提问来源于stack exchange,提问作者Johannes Hör
相关产品推荐
相关产品推荐

