2017-02-10 35 views
0

Итак, я пытаюсь написать веб-расширение Firefox. Я хочу, чтобы сохранить название, URL и личный комментарий веб-страницы в файл, myfile.txtJavascript скачать на лету сгенерированный файл BLOB в определенную папку

Вот это то, что я пришел:

enter image description here

Я не хочу, чтобы мои папки загрузок на быстро переполнены, поэтому я хотел бы загрузить их в папку, содержащуюся в папке «Мои загрузки», назовем ее 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> тег ... и я не могу себе представить, почему .. . :( есть ли способ я могу скачать файл молча, без запроса пользователя каждый раз, как это?

enter image description here

заранее спасибо !!

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 Еще раз спасибо Даниэлю, я подхожу к решению, но я еще не там.

Благодаря код, он начинает загрузку, но он говорит, что это не удалось, как на картинке enter image description here

Я проверил мой манифест, загрузки правильно есть.

Здесь,

{ 
    "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 решаемая.

Я на самом деле написал сообщение в блоге (мой самый первый!), Спасибо за помощь.

+0

@DanielHerr Спасибо. Думаю, я пришел к этой ссылке, но отказался, так как я новичок. Однако, можете ли вы предложить, как я могу сделать загрузку? Что я передаю в 'url' в этой функции? Это не URL-адрес, а механизм, который я использую для сохранения содержимого переменной JS в файл. – f126ck

ответ

0

Вы пробовали лидировать/или \ перед вашим файловым пунктом (/ VNW/..) или использовать полный файл-место назначения (.. \ downloads \ VNW \ myfile.txt). Вы используете это на своем собственный сервер? Возможно, вам, возможно, потребуется немного изучить структуру вашей файловой системы ??? Возможно, вам потребуется захватить выбранный вами путь к файлу из браузера?

+0

Да, пробовал .. ничего не изменилось .. '/' всегда заменяется на '_' при сохранении. Я забыл упомянуть, что я запускаю Ubuntu. Я запускаю его в своем браузере, локально, на своем ноутбуке. «Пользователи выбрали filepath ..» nah !! он должен быть исправлен! пользователям не нужно так беспокоиться! – f126ck

+0

Звучит глупо, но вы проверили свои разрешения для каталога? –

+0

Из первых строк «Плохие вещи» он сохраняет файл в папке «Загрузка» вместо «Загрузки/VNW», как я ожидаю, и он сохраняет файл как VNW_myfile.txt «похоже, что это ошибка, связанная с« code »hiddenElement .download = 'VNW/myfile.txt'; 'code' ... может быть, где/заменяется на _ ??? Это объясняет, что это не входит в подкаталог И имя файла отличается. –

1

Вам нужно будет использовать загрузку api и добавить разрешение «downloads» к манифесту.

browser.downloads.download({ 
url: URL.createObjectURL(new Blob([ textToSave ])), 
filename: "test/test.txt", 
saveAs: false, 
}) 

Если filename это путь, все родительские папки будут созданы при необходимости.

https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/downloads/download

Subfolders требуют Firefox 51+ https://bugzilla.mozilla.org/show_bug.cgi?id=1280044

+0

Жаль, что я ответил на ваш комментарий, я вижу только ваш ответ. Я здесь, спасибо за вашу помощь, но теперь он говорит «Failed» .. (я обновил свой вопрос). В конце концов я плачу вам пиво! – f126ck

+0

У меня есть это сообщение также на 50. Вы на Firefox 51? –

+0

Извините за задержку, я на Ubuntu 16.04 64 бит с Firefox 51.0.1 (64-разрядная) – f126ck