gpt4 book ai didi

javascript - 如何使用 JavaScript 设置 chrome 扩展的文件下载位置?

转载 作者:搜寻专家 更新时间:2023-11-01 04:25:30 26 4
gpt4 key购买 nike

您好,我正在使用 chrome 扩展程序下载选定的链接,但我无法设置下载位置。所有 url 下载到 chrome 的默认位置。我知道出于安全原因我们不能这样做。我们可以从这里在 chrome 扩展弹出窗口中提示目录选择器对话框吗?用户可以选择下载路径。需要我这边的任何信息让我知道。

这可能吗?关于如何去做有什么建议吗?

提前致谢我的代码

function downloadFile(url, onSuccess,arrayOfUrl,zip) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = "blob";
xhr.onreadystatechange = function () {

if (xhr.readyState == 4) {
if (onSuccess)
{
onDownloadComplete(xhr.response, arrayOfUrl,zip)
}
}
}
xhr.send("null");
}
function onDownloadComplete(blobData,urls,zip ){
if (count < urls.length) {
blobToBase64(blobData, function(binaryData){
var fileName = urls[count].substring(urls[count].lastIndexOf('/')+1);
zip.file(fileName+".docx", binaryData, {base64: true});
if (count < urls.length -1){
count++;
downloadFile(urls[count], onDownloadComplete, urls,zip);

}
else {

var content = zip.generate();

var zipName = 'download.zip';
var a = document.createElement('a');
a.href = "data:application/zip;base64," + content;
a.download = zipName;
a.click();
count = 0;

}
});
}
}

popup.js

function onDownloadComplete(blobData,urls,zip ){


if (count < urls.length) {
blobToBase64(blobData, function(binaryData){
// add downloaded file to zip:
var fileName = urls[count].substring(urls[count].lastIndexOf('/')+1);
// zip.file(fileName, binaryData, {base64: true});
zip.file(fileName+".docx", binaryData, {base64: true}); //file"+count+".docx"
if (count < urls.length -1){
count++;
downloadFile(urls[count], onDownloadComplete, urls,zip);

}
else {
chrome.runtime.getBackgroundPage(function () {
zipAndSaveFiles(zip);});



}

});
}
}

**background.js**

function zipAndSaveFiles(zip)
{
var content = zip.generate(zip);
var zipName = 'download.zip';
var dataURL = 'data:application/zip;base64,' + content;
chrome.downloads.download({
url: dataURL,
filename: zipName,
saveAs: true
});
}

最佳答案

由于您只生成和下载一个 ZIP 文件,您可以使用 chrome.downloads.download() 方法。例如:

var content = zip.generate();
var zipName = 'download.zip';
var dataURL = 'data:application/zip;base64,' + content;
chrome.downloads.download({
url: dataURL,
filename: zipName,
saveAs: true
});
count = 0;

如果省略SaveAs 对话框的显示,则只能指定用户定义的下载文件夹或其子文件夹中的文件名。


关于弹出窗口的问题(见下面的评论):您应该从后台页面而不是弹出窗口调用该函数。例如。你可以使用 chrome.runtime.sendMessage/onMessage 将消息传递到您的后台页面:

background.js 中:

...
function zipAndSaveFiles(...) { ... }
chrome.runtime.onMessage.addListener(function(msg, sender) {
if ((msg.action === 'zipAndSave')
&& (msg.params !== undefined)) {
zipAndSaveFiles(msg.params);
}
});

popup.js 中:

...
chrome.runtime.sendMessage({
action: 'zipAndSave',
params: ['url1', 'url2', 'url3']
});

关于javascript - 如何使用 JavaScript 设置 chrome 扩展的文件下载位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20988041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com