MV3扩展调用chrome.downloads.download()下载内置文件失败求助
解答
这是Manifest V3的安全限制导致的,无法直接通过chrome.downloads.download()使用chrome.runtime.getURL()返回的扩展资源URL完成下载。
原因是MV3对扩展私有资源做了严格隔离,chrome-extension://协议的URL仅能在扩展内部上下文访问,下载服务无法直接读取这类资源,和你的代码操作无关。
如果想尽量简化实现流程,可以用更紧凑的写法完成fetch转可下载URL的逻辑,没有多余冗余步骤:
修改background.js中的onClicked函数:
async function onClicked(tab, onClickData) { const res = await fetch(chrome.runtime.getURL("text/Test.txt")); const blob = await res.blob(); const tempUrl = URL.createObjectURL(blob); chrome.downloads.download({ conflictAction: "overwrite", filename: "Test.txt", saveAs: false, url: tempUrl, }, () => { // 下载完成后释放临时URL资源 URL.revokeObjectURL(tempUrl); }); }
这是MV3中实现内置资源下载的标准简洁方案,没有额外复杂操作。
内容的提问来源于stack exchange,提问作者Thomas Mueller
相关产品推荐
相关产品推荐

