Как заставить chrome.downloads.onDeterminingFilename изменять имена файлов только для загрузок с одного конкретного сайта?

Я пишу расширение для загрузки изображений с сайта, переименования и сохранения в новой папке в разделе "Загрузки". Я успешно справился с этим, но другие файлы, которые я загружаю с других сайтов, также переименовываются в "undefined.ext".

Я хотел сделать if else с downloadItem.referrer, но сайт, с которого я загружаю, возвращает пустую строку.

Вот как выглядит мой файл background.js.

    ...

    const downloadImg = (url, sequence) => {
      chrome.downloads.download({url: url}, function(downloadId) {
        nameMap[downloadId] = sequence;
      });
    }

    const downloadAllImages = (urls) => {
      for (key in urls) {
        downloadImg(urls[key], key);
      }
    }

    chrome.downloads.onDeterminingFilename.addListener(function(downloadItem, suggest) {
      id = downloadItem.id.toString();

реферер - пустая строка, поэтому я не могу сделать здесь еще.

      console.log('downloadItem.referrer', downloadItem.url, id, downloadItem.state, downloadItem.referrer, downloadItem);
      let newName = `./${someNewFolder}/` + nameMap[id] + downloadItem.filename.slice(downloadItem.filename.lastIndexOf('.'));
      suggest({filename: newName, conflictAction: "overwrite" });
    });


    const handleOnClick = () => {
      chrome.tabs.query({
        url: "*://*.someUrlMatch.xyz/*/*",
        active: true, 
        currentWindow: true
      }, (tabs) => {
        if (tabs.length > 0) {
          downloadAllImages(urls);
        }
      });
    }

    chrome.browserAction.onClicked.addListener(function(tab) {
      handleOnClick();
    });

manifest.json

    {
      "background": {
        "scripts": [ "js/jquery-3.3.1.slim.min.js", "js/background.js" ]
      },
      "browser_action": {
        "default_icon": "icon.png",
        "default_title": "Some Title",
      },
      "content_scripts": [
        {
          "matches": ["https://someUrlMatch.xyz/*/*"],
          "js": ["js/jquery-3.3.1.slim.min.js", "js/content.js"],
          "run_at": "document_end"
        }
      ],
      "description": "Some description",
      "manifest_version": 2,
      "name": "someName",
      "permissions": ["activeTab", "downloads", "tabs", "*://*.someUrlMatch.xyz/*/*" ],
      "version": "0.0"
    }

1 ответ

сверчки. Спасибо за ответ, ребята. Поэтому я сделал неоптимальный путь, проверив абсолютный URL-адрес элемента загрузки.

chrome.downloads.onDeterminingFilename.addListener((downloadItem, suggest) => {
  if (downloadItem.url === urlIWannaDownload) {
   ...
   suggest({filename: newName, conflictAction: "overwrite" });
  }
});
Другие вопросы по тегам