Итак, я пытаюсь написать веб-расширение Firefox. Я хочу, чтобы сохранить название, URL и личный комментарий веб-страницы в файл, myfile.txt
Javascript скачать на лету сгенерированный файл BLOB в определенную папку
Вот это то, что я пришел:
Я не хочу, чтобы мои папки загрузок на быстро переполнены, поэтому я хотел бы загрузить их в папку, содержащуюся в папке «Мои загрузки», назовем ее VNW
. FIY Я говорю «скачать», но это фиктивная загрузка: я создаю файл «на лету», и мне удалось сохранить это так: вам не требуется подключение к Интернету.
Я написал этот код:
var textToSave = "<TITLE>" + titolo + "</TITLE>" + "<COMMENT>" + comment + "</COMMENT>" + "<LINK>" + indirizzo + "</LINK>" + "\n";
var hiddenElement = document.getElementById('SAVE');
hiddenElement.href = 'data:attachment/text,' + encodeURI(textToSave);
hiddenElement.download = 'VNW/myfile.txt';
Плохие вещи он сохраняет файл в моей папке Downloads
вместо Downloads/VNW
, как я ожидал, и он сохраняет файл как VNW_myfile.txt
Почему?
Вопрос в вопросе: Когда я открываю в редакторе myfile.txt
я получаю, например:
<TITLE>How to download silently with javascript - Stack Overflow</TITLE><COMMENT>My comment</COMMENT><LINK>http://stackoverflow.com/questions/37781938/how-to-download-silently-with-javascript
Где отделан окончательный </LINK>
тег ... и я не могу себе представить, почему .. . :( есть ли способ я могу скачать файл молча, без запроса пользователя каждый раз, как это?
заранее спасибо !!
EDIT 1:
Использование Daniel герр комментарий Я пишу (я начинающий Javascript)
var comment = document.getElementById('COMMENT').value;
var titolo=document.getElementById('TITLE_TAB').value;
var indirizzo=document.getElementById('URL_TAB').value;
var textToSave = "<TITLE>" + titolo + "</TITLE>" + "<COMMENT>" + comment + "</COMMENT>" + "<LINK>" + indirizzo + "</LINK>" + "\n";
var downloading;
var txt_saving = 'data:attachment/text,' + encodeURI(textToSave);
downloading = browser.downloads.download(url : txt_saving,filename : 'VNW.txt');
Но это не работает ... Еще раз спасибо
EDIT 2 Еще раз спасибо Даниэлю, я подхожу к решению, но я еще не там.
Благодаря код, он начинает загрузку, но он говорит, что это не удалось, как на картинке
Я проверил мой манифест, загрузки правильно есть.
Здесь,
{
"browser_action": {
"browser_style": true,
"default_title": "TENTATIVO",
"default_popup": "save_url.html"
},
"description": "TENTATIVO",
"manifest_version": 2,
"name": "TENTATIVO",
"permissions": [
"tabs",
"downloads",
"activeTab"
],
"page_action": {
"default_icon": "save.png",
"default_title": "TENTATIVO"
},
"version": "1.0"
}
Добавление также весь код для справки.
save_url.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="tabs.css"/>
</head>
<body onload="save_url.js">
<div style="margin-left:5%" id="BODY">
<form>
<br>
<strong>TITOLO:</strong>
<br>
<input type="text" value="" id="TITLE_TAB" style="width:90%;"></input>
<br>
<strong>URL:</strong>
<br>
<input type="text" value="" id="URL_TAB" style="width:90%;"></input>
<br>
<strong>DESCRIZIONE:</strong>
<br>
<textarea rows="5" cols="5" placeholder="Descrizione.." style="width:90%;" id="COMMENT"></textarea>
<br>
<center>
<a href="" id="SAVE" style="width:90%;" value = "" >SALVA</a>
</center>
<br>
<br>
</form>
</div>
<script src="save_url.js"></script>
<script src="FileSaver.js"></script>
</body>
</html>
save_url.JS
browser.tabs.query({'active': true, 'lastFocusedWindow': true}, function (tabs) {
var url = tabs[0].url;
var title = tabs[0].title;
var x = document.getElementById("URL_TAB");
x.value = url;
var y = document.getElementById("TITLE_TAB");
y.value = title;
});
document.addEventListener('DOMContentLoaded', function() {
document.getElementById("SAVE").addEventListener("click", salva);
});
function salva()
{
var comment = document.getElementById('COMMENT').value;
var titolo=document.getElementById('TITLE_TAB').value;
var indirizzo=document.getElementById('URL_TAB').value;
var textToSave = "<TITLE>" + titolo + "</TITLE>" + "<COMMENT>" + comment + "</COMMENT>" + "<LINK>" + indirizzo + "</LINK>" + "\n";
browser.downloads.download({
url: URL.createObjectURL(new Blob([ textToSave ])),
filename: "test/test.txt",
})
}
EDIT 3 решаемая.
Я на самом деле написал сообщение в блоге (мой самый первый!), Спасибо за помощь.
@DanielHerr Спасибо. Думаю, я пришел к этой ссылке, но отказался, так как я новичок. Однако, можете ли вы предложить, как я могу сделать загрузку? Что я передаю в 'url' в этой функции? Это не URL-адрес, а механизм, который я использую для сохранения содержимого переменной JS в файл. – f126ck