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

2023-11-22

您好,我正在使用 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将消息传递到您的后台页面:

In 背景.js:

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

In popup.js:

...
chrome.runtime.sendMessage({
    action: 'zipAndSave',
    params: ['url1', 'url2', 'url3']
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 JavaScript 设置 Chrome 扩展的文件下载位置? 的相关文章

随机推荐

  • 将 NOT IN 转换为 NOT EXISTS

    在理解 NOT EXISTS 的用法时经历了一场噩梦 主要是如何转换下面的 NOT IN 解决方案 以便我能够真正理解我是如何实现结果的 在askTom oracle 论坛和stackoverflow 上有几篇文章 但找不到任何明显有助于理
  • python3中的sys.stdout.write在字符串末尾添加11

    有人可以解释为什么吗sys stdout write 追加11到我的绳子 python3 Python 3 4 3 default Jul 28 2015 13 17 50 GCC 4 9 3 on linux Type help copy
  • 在身份验证库中找不到 GoogleSignIn 类

    我在通过 Android 应用程序登录 Google Play 时遇到问题 我补充道 编译 com google firebase firebase auth 11 4 2 和 编译 com google android gms play
  • Windows 任务管理器中的“转储文件”是什么?

    我知道在 Windows 中 您可以通过转到任务管理器 gt 进程 gt 右键单击进程来生成转储文件 什么是转储文件 我可以用 dmp 文件做什么 dmp 文件是Minidump 实时进程的快照 包含有关其当前状态的信息 包括内存 堆栈跟踪
  • 最大化 $digest 迭代

    我正在玩弄指令和 在此绑定fiddle 我收到以下错误 Uncaught Error 10 digest iterations reached Aborting Watchers fired in the last 5 iterations
  • @"some string" 在 Objective-C 中是什么意思?

    我刚刚开始 iphone 开发 遇到了一些使用 somestring 的示例代码 someLabel txt string of text 为什么字符串需要 我猜这是创建对象的某种快捷方式 它使用该字符串创建一个 NSString 对象 而
  • 当对等点不在 NAT 后面时,由于主机地址混淆,WebRTC 在现代浏览器中不起作用

    在对我的网络应用程序进行故障排除时 我发现草稿 mdns ice 候选者 这是关于使用 mDNS 混淆候选主机中的地址 我发现 当两个对等点 代理 L 代理 R 处于如下图 7 所示的拓扑时 WebRTC 对等点连接失败 因为代理 R 的主
  • AngularJS 在按钮单击时打开模式

    我正在尝试学习通过单击 AngularJS 中的按钮来打开模式对话框 但无法这样做 我检查了 chrome 控制台 但没有错误 另外 由于我正在学习 AngularJS 请建议当 chrome 控制台没有显示任何错误时该怎么做 这是我的代码
  • 在 Matlab 或 matplotlib 中根据法向量和点绘制平面

    如何从法向量和点在 matlab 或 matplotlib 中绘制平面 对于所有的复制 粘贴 这里是使用 matplotlib 的 Python 类似代码 import numpy as np import matplotlib pyplo
  • Qt:QAbstractItemModel 中的 setData 方法

    我是模型视图新手 我一直在关注本教程在检查文档的同时 我偶然发现了这个小细节 可以下载的教程代码hereQAbstractItemModel 类 此处为 QAbstractListModel 中有 setData 方法 其代码为 def s
  • 使用 JQuery,如何检测文本输入的值是否已更改而字段仍具有焦点?

    我注意到在发布此问题之前 之前曾在此主题上发布过类似的问题 但是在这种情况下 用户没有使用键盘与文本字段进行交互 在这种情况下 将文本字段绑定到 粘贴 行动或任何其他漂亮的建议在我的情况下都不起作用 我们的用户正在输入从条形码扫描的字符串值
  • 我在 Windows 窗体中的跨线程调用出了什么问题?

    我在使用 Windows 窗体应用程序时遇到问题 表单必须从另一个线程显示 所以在表单类中 我有以下代码 private delegate void DisplayDialogCallback public void DisplayDial
  • 如何动态调整 UITableView 高度?

    在我的应用程序中 我想在处于编辑模式时与非编辑模式时调整表格视图的高度 以便为表格视图下方的编辑控件腾出空间 这应该怎么做呢 我发现当另一个视图中有浮动表时 操作 bounds 属性可能会导致一些意外的行为 有时 当增加高度时 表格会向上扩
  • 带有字符串数组参数的 PowerShell 脚本的计划任务

    我创建了一个可以从 Management Shell 完美运行的 PowerShell 脚本 我正在尝试将其设置为在 Windows Server 2008 R2 中的计划任务中工作 但不确定如何传递字符串数组参数的参数 这是我的脚本的相关
  • 通过多路径刷图绘制 d3.js Focus+Context 时遇到问题

    我已经研究了几周了 似乎无法弄清楚如何绘制具有多个路径的下面的图表 通过刷图聚焦 上下文 我尝试创建一个 jsfiddle 但无法复制我得到的屏幕 此时 我所拥有的与原始图表类似 只是只有一条路径而不是区域 并且刷牙有效 基本上尝试将焦点图
  • 确定德州扑克牌局获胜者的算法

    好的 我正在为我的高级项目制作德州扑克人工智能 我已经创建了图形用户界面和投注 交易程序 但我已经达到了需要确定谁赢了手的部分 并且我不知道解决此问题的最佳方法 顺便说一句 我正在使用 python ATM 我有 2 个列表 一个用于 7
  • 如何使用命令行从私有 github 存储库下载单个原始文件?

    在 CI 服务器上 我想获取我们在 Github 上维护的配置文件 以便可以在多个作业之间共享 我试图通过curl获取这个文件 但是这些方法都失败了 我得到了404 As advised by the oAuth docs curl H A
  • 在启用加密文件系统的情况下从 C# 创建新目录

    有人在启用加密文件系统的情况下从 C 创建了新目录吗 此外 任何有关通过安装执行此操作的信息也会很有帮助 创建加密目录需要两个步骤 使用 Directory CreateDirectory 创建它 然后使用 Win32 函数 Encrypt
  • 我可以在 SQLAlchemy 中创建临时表而不附加到 Table._prefixes 吗?

    我想在 SQLAlchemy 中创建一个临时表 我可以建立一个CREATE TABLE声明与TEMPORARY通过调用子句table prefixes append TEMPORARY 反对Table对象 但这不如table select
  • 如何使用 JavaScript 设置 Chrome 扩展的文件下载位置?

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