chrome.downloads.download игнорирует параметры после 'url' - PullRequest
0 голосов
/ 26 мая 2019

Я пытаюсь написать простое расширение, которое автоматически загружает изображение с веб-сайта нашей компании в каталог.Проблема в том, что chrome.downloads.download, кажется, игнорирует каждый параметр после 'url'.Он загружает файл.Но сохраняет оригинальное имя и игнорирует подкаталоги.Он добавит (#), если файл уже завершен, вместо перезаписи, как указано в коде.

Я пробовал различные способы реализации объекта, переданного в chrome.downloads.download, включая создание объекта со всемипараметры и передача этого объекта.Я пытался использовать цитаты, даже если это не имело смысла.Я попытался переформатировать параметр имени файла, даже давая ему фиксированное значение "foo.jpg".Я пытался сделать это как в content.js, так и в bs.js.Я подтвердил, что имя файла передается в фоновый скрипт, и значение доступно, отображая его с alert() в фоновом скрипте

//Manifest.js (important parts)
"permissions": ["downloads","webNavigation"],
"background": {
    "scripts": ["bs.js"],
    "Persistent": false
    },
"content_scripts": [
    {
        "matches": ["<all_urls>"],
        "js": ["jquery-3.4.1.min.js"]
    },
    {
        "matches": ["https://mycompany.com/*"],
        "js": ["content.js"]
    }

    ]

//Content.js (important parts)
var $imgs = $('#spec_jpg img');
var url = "https:" + $imgs.attr('src');
var filename ="specificationArchive/" +  url.substring(url.lastIndexOf('/')+1); //edited
chrome.runtime.sendMessage({url: url, filename: filename});

//bs.js (whole thing)
chrome.runtime.onMessage.addListener(
    function(request, sender){
      chrome.downloads.download ( { url: request.url,
      filename: request.filename,
      conflictAction: "overwrite",
      saveAs: false }
      )
    }
);

Расширение действительно загружает файл, но я ожидал, что оносохраните его в подкаталоге, называемом спецификацией архива.Я также ожидал, что он перезапишет существующий файл вместо добавления (#) в конец имени.Даже при передаче абсолютной строки имени файла я получаю исходное имя файла

1 Ответ

0 голосов
/ 27 мая 2019

Решение, предоставляемое wOxxOm, заключается в добавлении дополнительного слушателя. Вот код, который был добавлен в bs.js

//bs.js
chrome.downloads.onDeterminingFilename.addListener(function(item, suggest) {
suggest({filename: "specificationArchive/" + item.filename, conflictAction: 'overwrite'});
});

После того, как это было включено, оно сохраняется в указанном каталоге. Еще раз спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...