首页 > 解决方案 > 如何在我的内容脚本中使用 chrome.download?

问题描述

我正在尝试使用 chrome.download 方法下载 CSV 文件类型并在下载时更改文件的名称。

目前,我正在使用

document.querySelectorAll("[file$='foo']").forEach(a=>a.click());

模拟单击要下载的每个元素。但是,下载时的每个文件名都是 foo.csv、foo(1).csv 等。最后我想下载文件并更改文件名。目前我正在通过内容脚本执行此操作,并且从我所阅读的内容来看,我无法访问 chrome.download API,并且必须使用来自我的 background.js 的消息传递。

据我了解,与此类似的其他帖子涉及创建一个新的元素/内容以供下载,而不是下载网站上已有的内容。

示例 示例 2

任何帮助是极大的赞赏!谢谢!!

我的背景.js

function changeName(prevName){
    chrome.downloads.onDeterminingFilename.addListener((prevName, suggest) => {
        suggest({
            filename: 'new-name.csv'
          });
        });
    };

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

和我的 contentscript.js

 button.addEventListener('click', function() {
    var elems = document.getElementsByClassName("Stmt");
    var count = 1;


    var interval = setInterval(function(){
      elems[count].click();

      chrome.runtime.sendMessage({
        action: 'renameSave',
        params: ["statement.csv"]
      });

      count = count + 2;
      if(count > elems.length){
            clearInterval(interval);
        }

  },800);
}, false);

标签: javascriptgoogle-chromegoogle-chrome-extensioncontent-script

解决方案


这不成问题。有 chrome.downloads 事件onDeterminingFilename,它有助于“建议”下载项目的文件名。此 API 可用于后台页面:

  1. 创建一个名为“background.js”的文件
  2. 将对它的引用放在清单中。
"background": {
    "scripts": ["background.js"],
}
  1. 向清单部分添加“下载”权限
  2. 这段代码正在做你想做的事:
chrome.downloads.onDeterminingFilename.addListener((item, suggest) => {
    // "item.filename" - the current filename
    suggest({
        filename: 'new-name.csv'
    });
});

推荐阅读