如何使用 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 扩展的文件下载位置? 的相关文章

  • 在 javascript/jquery 中将光标更改为等待

    当调用函数时 如何让光标更改为此加载图标以及如何将其更改回 javascript jquery 中的普通光标 在你的 jQuery 中使用 body css cursor progress 然后又恢复正常 body css cursor d
  • React js Stripe 结账不起作用

    我正在尝试在 React js 应用程序中呈现条带结账默认表单
  • jquery.find() 可以只选择直接子项吗?

    我应该向 jQuery find 提供什么参数来选择元素子元素而不选择其他元素 我不能用 gt 引导选择器 而用 将选择所有后代 而不仅仅是直接子代 我知道 jQuery children 但这是一个库 因此用户能够提供自己的选择器 并且我
  • Web 串行 API - 未捕获(承诺中)DOMException:无法打开串行端口/所需成员 baudRate 未定义

    下面的代码可以在我的 Xubuntu 机器上运行 但现在我在 Kubuntu 上 它不再工作了 它不会打开端口 Arduino IDE 工作正常 可以向开发板写入代码 并且我可以在 Chrome 中选择设备 Arduino Uno 但当我尝
  • 在 Vue.js 中从父组件执行子方法

    目前 我有一个 Vue js 组件 其中包含其他组件的列表 我知道使用 vue 的常见方式是将数据传递给孩子 并从孩子向父母发出事件 但是 在这种情况下 我想在子组件中的按钮出现时执行子组件中的方法 parent被点击 哪种方法最好 一种建
  • 如何重置使用 JavaScript 更改的 CSS 属性?

    我的导航按钮的宽度从 100px 增加到 150px 当鼠标悬停在 nav li hover width 150px 但是使用 javascript 我已经做到了 无论选择哪个选项 宽度都将继续为 150px 当选择每个选项时 它会使其他选
  • 使用 useReducers 调度函数发送多个操作?

    使用时是否可以通过调度函数发送多个动作useReducer挂钩反应 我尝试向它传递一组操作 但这会引发未处理的运行时异常 明确地说 通常会有一个初始状态对象和一个减速器 如下所示 const initialState message1 nu
  • 如何防止 Iframe 在与浏览器交互后弄乱浏览器的历史记录?

    因此 就我而言 我使用 Iframe 将 Grafana 附加到我的页面 这为我提供了漂亮且易于使用的图表 可以注意到 每次在图表上进行放大或缩小 使用鼠标单击 交互后 Grafana 的 Iframe 都会在我的 Angular 页面上触
  • 如何抑制窗口鼠标滚轮滚动...?

    我正在开发嵌入页面中的画布应用程序 我有它 因此您可以使用鼠标滚轮放大绘图 但不幸的是 这会滚动页面 因为它是文章的一部分 当我在 dom 元素上滚动鼠标滚轮时 是否可以阻止鼠标滚轮在窗口上滚动 附加鼠标滚轮 不是 Gecko DOMMou
  • 如何监听 jQuery AJAX 请求?

    以下两种实现 ajaxRequest 1 2 的方法应该是等效的 话说回来 为什么验证回调已执行的单元测试 3 在 1 中成功而在 2 中失败 我应该如何重写测试 3 来监视 2 中的成功回调 如果我尝试stub jQuery ajax使用
  • Javascript正则表达式用于字母字符和空格? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我需要一个
  • 除了更改标题之外,如何在 Firefox 中强制另存为对话框?

    有没有办法在 ff 中强制打开 www example com example pdf 的另存为对话框 我无法更改标题 如果您可以将文件以 Base64 格式输出到客户端 则可以使用 data uri 进行下载 location href
  • 从未用 @flow 标记的导入文件中获取类型定义

    TL DR我怎么告诉flow从未声明的导入模块导入类型定义 flow 加长版 流接缝能够从不使用流语法的文件中派生类型 请参阅示例 示例文件 flow js if Math random lt 0 5 var y hello else va
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • 使用 KnockoutJs 映射插件进行递归模板化

    我正在尝试使用以下方法在树上进行递归模板化ko映射 插入 http knockoutjs com documentation plugins mapping html 但我无法渲染它 除非我定义separate每个级别的模板 在以下情况下
  • 在javascript中解析json - 长数字被四舍五入

    我需要解析一个包含长数字的 json 在 java servlet 中生成 问题是长数字被四舍五入 当执行这段代码时 var s x 6855337641038665531 var obj JSON parse s alert obj x
  • 将div设置为隐藏,延时后可见

    我试图在 X 时间后 也许甚至在随机时间之后 但现在我们只做固定时间 在黑色背景上出现一个黄色方块 function initialSetup if document getElementById yellow null document
  • 为什么在 Internet Explorer 中访问 localStorage 对象会引发错误?

    我正在解决一个客户端问题 Modernizr 意外地没有检测到对localStorageInternet Explorer 9 中的对象 我的页面正确使用 HTML 5 文档类型 并且开发人员工具报告该页面具有 IE9 的浏览器模式和 IE
  • Safari 支持 JavaScript window.onerror 吗?

    我有一个附加到 window onerror 的函数 window onerror function errorMsg url line window alert asdf 这在 firefox chrome 和 IE 中工作正常 但在 s
  • JQuery 图像上传不适用于未来的活动

    我希望我的用户可以通过帖子上传图像 因此 每个回复表单都有一个上传表单 用户可以通过单击上传按钮上传图像 然后单击提交来提交帖子 现在我的上传表单可以上传第一个回复的图像 但第二个回复的上传不起作用 我的提交过程 Ajax 在 php 提交

随机推荐

  • 将 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 扩展弹出窗口中提示目录选择器对话框吗 用户可以从这里选择下