Добрый день, уважаемые знатоки!
Есть у меня отличное самописное расширение для Хрома, допиливаемое неспешно "на коленке" вот уже несколько лет.
И по ряду причин, возникла необходимость портировать его (хотя бы в урезанном виде) под ФФ.
И одна из функций, которое реализует расширение, была выгрузка распарсенной сводной информации о публикациях со страниц одного узкоспециального сайта в виде простого текста.
Реализовано было до безобразия просто, см. ниже. Закомментаренное — это реализация в хромовском расширении, предыдущая строка — переделанное под ДОМ расширений ФФ.
В контент-скрипте:
function DownloadFile(options){
console.log("DownloadFile", options);
browser.runtime.sendMessage({ type: "download", url: options.url, filename: options.filename } );
// chrome.extension.sendMessage({ type: 'download', url: url, filename: filename });
}
...
var filecontent = aParsedPage.pubauthor + "\n" + aParsedPage.pubnumber + "\n" +
aParsedPage.pubdate + "\n" + aParsedPage.pubname + "\n" +
aParsedPage.pubdesc;
var url = 'data:application/txt;charset=utf-8,' + encodeURIComponent(filecontent);
var filename = fileprefix + 'descr.txt';
DownloadFile({ url: url, filename: filename });
И в бэкграунд скрипте:
browser.runtime.onMessage.addListener(MessageHandler);
//chrome.extension.onMessage.addListener(MessageHandler);
function MessageHandler(request, sender, callback){
console.log("MеssageHandler", request.type, request);
switch (request.type) {
case "download":
chrome.downloads.download({
url: request.url,
filename: request.filename,
saveAs: false
});
break;
default:
break;
}
}
Сразу скажу, что если функции DownloadFile передаются обычные сетевые URL протокола http(s) — оба варианта (и Хромовский, и ФФ) отлично отрабатывают. Сформированные строки-URLы выглядят в отладчике абсолютно одинаково, как и целевые имена файлов для загрузки. Все оттестировано и работает совершенно корректно и аналогично одинаково — за исключением маленькой детали.
Именно при подстановке вместо URL сформированной на лету строки данных — в Хроме ожидаемо загружается в дефолтной папке текстовый файл, а в ФФ — ничего не происходит вообще. Просто молча игнорируется и продолжается выполнение скрипта.
Что уже было опробовано:
1) добавление в манифест <ALL_URLS>
2) попытка формировать URL через BLOB:
var filecontent = aParsedPage.pubauthor + "\n" + aParsedPage.pubnumber + "\n" +
aParsedPage.pubdate + "\n" + aParsedPage.pubname + "\n" +
aParsedPage.pubdesc;
var oMyBlob = new Blob([ filecontent ] , {type : 'application/txt;charset=utf-8'}); // the blob
var url = URL.createObjectURL(oMyBlob );
В любых вариантах просто молча ничего не происходит, без выдачи каких-либо ошибок и предупреждений. И в варианте №2 к тому строка не формируется ожидаемым образом.
На данный момент, идеи у меня иссякли, гугление также не выдает ничего нового. Дальше без данной функции продолжать разработку смысла также нет, т.к. она по сути базовая.
Что скажет уважаемый ALL?