Сохранить файл Javascript с именем файла

Я работаю над текстовым редактором в чистом Javascript. Мне бы хотелось, чтобы при нажатии пользователем кнопки "Сохранить" редактор загружает файл. Я уже частично работал:

uriContent = "data:application/octet-stream," + encodeURIComponent(codeMirror.getValue());
newWindow=window.open(uriContent, 'filename.txt');

Загрузка файла, но проблема в том, что файл называется "загрузка".

Вопрос. Как я могу изменить имя файла как угодно, например filename.txt?

Ответ 1

Замените кнопку "Сохранить" на привязку и установите новый атрибут download динамически. Работает в Chrome и Firefox:

var d = "ha";
$(this).attr("href", "data:image/png;base64,abcdefghijklmnop").attr("download", "file-" + d + ".png");

Вот рабочий пример с именем, заданным как текущая дата: http://jsfiddle.net/Qjvb3/

Здесь приведена таблица совместимости для атрибута download: http://caniuse.com/download

Ответ 2

function saveAs(uri, filename) {
    var link = document.createElement('a');
    if (typeof link.download === 'string') {
        document.body.appendChild(link); // Firefox requires the link to be in the body
        link.download = filename;
        link.href = uri;
        link.click();
        document.body.removeChild(link); // remove the link when done
    } else {
        location.replace(uri);
    }
}

Ответ 3

Используйте свойство filename следующим образом:

uriContent = "data:application/octet-stream;filename=filename.txt," + 
              encodeURIComponent(codeMirror.getValue());
newWindow=window.open(uriContent, 'filename.txt');

EDIT:

По-видимому, нет надежного способа сделать это. Смотрите: Есть ли способ указать предлагаемое имя файла при использовании данных: URI?