Я использовал вариант решения здесь
var downloadCSS = function () {
window.URL = window.webkitURL || window.URL;
file = new BlobBuilder(); //we used to need to check for 'WebKitBlobBuilder' here - but no need anymore
file.append(someTextVar); //populate the file with whatever text it is that you want
var a = document.createElement('a');
a.href = window.URL.createObjectURL(file.getBlob('text/plain'));
a.download = 'combined.css'; // set the file name
a.style.display = 'none';
document.body.appendChild(a);
a.click(); //this is probably the key - simulatating a click on a download link
delete a;// we don't need this anymore
}
Одна вещь, о которой вам нужно помнить, - это то, что этот код должен выполняться на странице, а не на вашем расширении - в противном случае пользователь не увидит действие загрузки, которое выполняет Chrome. Загрузка все равно произойдет, и вы сможете увидеть ее на вкладке загрузки, но они не увидят фактической загрузки.
Редактировать (запоздалая мысль о том, как заставить ваш код выполняться на странице содержимого):
Способ, которым вы выполняете действие на странице содержимого, а не на своем расширении, - это использование Chrome «передача сообщений» . По сути, вы передаете сообщение от вашего расширения (которое почти похоже на отдельную страницу) на страницу контента, с которой работает расширение. Затем у вас есть прослушиватель, который ваше расширение внедрило в контентную страницу, которая реагирует на сообщение и выполняет загрузку. Примерно так:
chrome.extension.onMessage.addListener(
function (request, sender, sendResponse) {
if (request.greeting == "hello") {
try{
downloadCSS();
}
catch (err) {
alert("Error: "+err.message);
}
}
});