Как на клиентском JavaScript создать некий текст и сохранить
Нужно дать пользователю возможность сохранить некий текст в файл, даже если отключен интернет
|
mmotor,
Сохранить в один из вариантов Storage браузера, наиболее просто в localStorage, но убивается очисткой Кеша, про менее распространённые методы можно почитать в гугле, к примеру FileApi |
Локально через data url, например http://stackoverflow.com/a/18197511/2607462
|
мб localStorage подойдёт?
|
А как из localStorage сохранить текст в файл на диск?
|
Цитата:
Достаём из локала и юзаем актив. |
Основная задача не сохранить на диск - явно, а сделать данные нестираемые при очиске кеша браузера, а сохранить можно и на сервер при восстановлении связи. Для этого есть (не во всех браузерах) иные Storage и FileApi
|
Благодарю за ответы. У меня основная задача все таки сохранить на диск, причем в пределах текущей сессии.
В целом я сделал так window.open("data:application/octet-stream," + (JSON.stringify(content)), "fail"); Теперь возник вопрос, как задать имя файлу. |
mmotor,
window.open("data:application/octet-stream," + (JSON.stringify(content)), input.value+".txt"); |
window.open("data:application/octet-stream," + (JSON.stringify("df")), "d.txt"); нету имени у файла заданного |
Цитата:
Цитата:
|
Вот кусок из юзер-скрипта сохраняющий массив в чесеве:
if(rows.length) { var blob = new Blob(rows, {type:'text/csv'}), link = document.createElement("a"); link.download = file_name+'.csv'; link.style.display='none'; link.href = window.URL.createObjectURL(blob); link = document.body.appendChild(link); link.click(); var timeoutID = setTimeout(function() { link = document.body.removeChild(link); delete link; window.clearTimeout(timeoutID); }, 1500); } Возможно ФФ-специфичный, попробуйте приделать к своим реалиям. Через блоб получается лучше чем через дата-урл напрямую. ЗЫ Для фактуры http://stackoverflow.com/questions/1...-and-save-file |
сохранение текста в файл для Google Chrome и Mozilla Firefox
mmotor,
function download(filename, text) { var blob = new Blob([text], {type:'text/csv'}), link = document.createElement('a'); link.href = URL.createObjectURL(blob); link.setAttribute('download', filename); var event = document.createEvent('MouseEvents'); event.initEvent('click', true, true); link.dispatchEvent(event); } download('test.txt', 'Hello world! Hello world!'); |
if (document.createEvent) то click() не сработает?
|
kostyanet,
нет не сработает, проверить как всегда кому-то лень -- можно убрать link.click(); только ветка document.createEvent |
Ну я и говорю, а если document.createEvent то click() не сработает?
|
kostyanet,
нет Firefox не будет реагировать на такой клик, Chrome безразлично сработает в обоих случаях, click() оставлен про запас не нравится можно убрать. |
Цитата:
Я одного не пойму - вы же видите что условие вычисляется в true Цитата:
Короче, прямым текстом - в каком браузере a.click() не сработает и понадобится сооружать кастомное событие и поджигать? |
kostyanet,
в Firefox не сработает click() |
kostyanet,
убрал лишнее смотрите 13 пост |
Цитата:
Ладно, не важно. Вы просто скопировали сырец с СО по моей ссылке, чтобы любовно оформить его в тегах "запустить". В этом же вы видите вашу великую миссию - подсовывать ламерам готовенькое за плюсики. Звучит гимн героев советского союза... :) Разумеется в ФФ .click() работает и давно и получше чем в других браузерах. |
Цитата:
|
Да ему просто не под силу признать факт, теперь будет делать круглые глаза, изображать патетику и охать. Как будто я не видел таких светочей.
|
kostyanet
хорошо пусть в вашей вселенной клик в ФФ работает тогда этот код для вас function download(filename, text) { var blob = new Blob([text], {type:'text/csv'}), link = document.createElement('a'); link.href = URL.createObjectURL(blob); link.setAttribute('download', filename); link.click() } download('test.txt', 'Hello world! Hello world!'); остальным я рекомендую не этот а рабочий код в 13 посте. буду считать что вы kostyanet невнимательны, при чтении тем. |
Цитата:
Надо в дом засунуть и тогда хоть где хоть защелкайся. То есть смысл той вилки все равно нулевой. Нет никакой связи между наличием кастомных событий и возможной фичей браузера который дает щелкать по абстрактному элементу (ну типа элементу в теневом доме). Потому что вы подепили тот снипет лишь бы оформить. Вот что надо вставить перед link.click(): link = document.body.appendChild(link); link.click(); Ну, типа да, затем придется удалить или просто закешировать и затем навешивать другие урлы и имена файлов. |
Цитата:
Цитата:
мир по прежнему вокруг вас одни дураки. да, а где код с интерфейсом для Цитата:
|
Цитата:
|
kostyanet,
только как догадатся что rows это массив с текстом? вижу недоработочка в интерфейсе, добавьте поле ввода с проверкой, чтоб не гонять пустой массив, а то вы как то не по программистки. |
Признаю вашу наглость и позволяю приделать к тому кусочку все что пожелаете.
Для тех кто тоже нипонял: текст надо засунуть в [], то есть вот так передать [text] |
Цитата:
|
Цитата:
Цитата:
|
Ну так а как в IE то сделать?
|
mmotor,
Вы бы сказали конечную задачу, возможно( а тем более в ИЕ) сохранять без файла. Наверняка не затем, чтобы читать файл самому пользователю? (Или да ?) Думаю, вы хотите затем загрузить этот файл при обрыве инет-соединения ? В ИЕ есть ведь и другие способы сохранить данные, к примеру порыть в сторону behavior |
|
Подскажите, а как теперь сохранить картинку таким же образом
|
|
Часовой пояс GMT +3, время: 05:21. |