Arv*_*ala 5 javascript google-chrome google-chrome-extension
嗨我正在使用chrome扩展名下载所选链接,但我无法设置下载位置.所有网址都下载到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;
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
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
});
}
Run Code Online (Sandbox Code Playgroud)
由于您只生成并下载一个 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;
Run Code Online (Sandbox Code Playgroud)
如果省略对话框的显示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);
}
});
Run Code Online (Sandbox Code Playgroud)
在popup.js中:
...
chrome.runtime.sendMessage({
action: 'zipAndSave',
params: ['url1', 'url2', 'url3']
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9865 次 |
| 最近记录: |