使用 downloads.download() API 将数据 URI 保存为文件
Save Data URI as file using downloads.download() API
更新
我已经解决了这个问题(感谢@DanielHerr),方法是使用 Blob URL / Object-URL (URL.createObjectURL(blob)
), 但是我仍然很好奇为什么在使用 data:
URLs
时会出现这个错误
我正在使用 WebExtensions API 为 Chrome 和 Firefox 创建一个扩展。
该扩展程序会随着时间的推移收集数据,我想实现一个将其导出为 CSV 文件的功能。
我尝试使用 downloads.download()
下载文件,但出现错误:
Error: Type error for parameter options (Error processing url: Error: Access denied for URL data:text/csv;charset=utf-8;base64,{data...}
) for downloads.download.
我已经尝试将 "<all_urls>"
添加到 manifest.json
中的 permissions
键,但这没有任何区别。
这是我使用的代码:
var csv = 'Hello, World!' // Real data goes here
var url = 'data:text/csv;charset=utf-8;base64,' +
window.btoa(unescape(encodeURIComponent(csv)))
chrome.downloads.download({'url': url})
我似乎不知道如何解决这个问题,非常感谢您的帮助!谢谢!
我的 manifest.json
看起来像这样:
{
"manifest_version": 2,
"name": "Name",
"version": "1.0.0",
"description": "Description",
"icons": {
"16": "/icons/icon-16.png",
"32": "/icons/icon-32.png",
"48": "/icons/icon-48.png",
"64": "/icons/icon-64.png",
"96": "/icons/icon-96.png"
},
"applications": {
"gecko": {
"id": "@name",
"strict_min_version": "48.0"
}
},
"background": {
"scripts": ["/scripts/a.js"]
},
"permissions": [
"storage",
"tabs",
"activeTab",
"downloads",
"<all_urls>"
]
}
a.js
包含导出为 CSV 的代码。
我把剩下的代码去掉了,只剩下manifest.json
、a.js
和图标文件了,但是还是报同样的错误
我通过使用 Blob URL / Object-URL 而不是数据 URI 解决了这个问题:
var csv = 'foo,bar,baz'
var blob = new Blob([csv], {type: "text/csv;charset=utf-8"})
chrome.downloads.download({
'url': URL.createObjectURL(blob),
'filename': 'file.csv',
})
更新
我已经解决了这个问题(感谢@DanielHerr),方法是使用 Blob URL / Object-URL (URL.createObjectURL(blob)
), 但是我仍然很好奇为什么在使用 data:
URLs
我正在使用 WebExtensions API 为 Chrome 和 Firefox 创建一个扩展。
该扩展程序会随着时间的推移收集数据,我想实现一个将其导出为 CSV 文件的功能。
我尝试使用 downloads.download()
下载文件,但出现错误:
Error: Type error for parameter options (Error processing url: Error: Access denied for URL
data:text/csv;charset=utf-8;base64,{data...}
) for downloads.download.
我已经尝试将 "<all_urls>"
添加到 manifest.json
中的 permissions
键,但这没有任何区别。
这是我使用的代码:
var csv = 'Hello, World!' // Real data goes here
var url = 'data:text/csv;charset=utf-8;base64,' +
window.btoa(unescape(encodeURIComponent(csv)))
chrome.downloads.download({'url': url})
我似乎不知道如何解决这个问题,非常感谢您的帮助!谢谢!
我的 manifest.json
看起来像这样:
{
"manifest_version": 2,
"name": "Name",
"version": "1.0.0",
"description": "Description",
"icons": {
"16": "/icons/icon-16.png",
"32": "/icons/icon-32.png",
"48": "/icons/icon-48.png",
"64": "/icons/icon-64.png",
"96": "/icons/icon-96.png"
},
"applications": {
"gecko": {
"id": "@name",
"strict_min_version": "48.0"
}
},
"background": {
"scripts": ["/scripts/a.js"]
},
"permissions": [
"storage",
"tabs",
"activeTab",
"downloads",
"<all_urls>"
]
}
a.js
包含导出为 CSV 的代码。
我把剩下的代码去掉了,只剩下manifest.json
、a.js
和图标文件了,但是还是报同样的错误
我通过使用 Blob URL / Object-URL 而不是数据 URI 解决了这个问题:
var csv = 'foo,bar,baz'
var blob = new Blob([csv], {type: "text/csv;charset=utf-8"})
chrome.downloads.download({
'url': URL.createObjectURL(blob),
'filename': 'file.csv',
})