Как я динамично создаю документ для загрузки в JavaScript?

Я пишу некоторый код JavaScript, который генерирует XML-документ в клиенте (через плагин Google Earth). Я хотел бы, чтобы пользователь смог нажать кнопку на странице и быть запрошенным сохранить это XML в новый файл. Если бы я генерировал серверную сторону XML, то это было бы легко, просто заставить кнопку открыть ссылку. Но XML сгенерирован клиентский.

Я придумал несколько взломов, которые полуработают, вдохновленные частично этим вопросом о StackOverflow. Но ни один полностью не работает. Вот демонстрационный HTML со встроенным кодом:


Click for Data URL
Click for Window

dlDataURI () версия работает отлично в Firefox, плохо в Chrome (не может сохранить), и нисколько в IE. Окно () работы версии хорошо в Firefox и IE, и не хорошо в Chrome (не может сохранить, XML, встроенный в HTML). Никакая версия никогда не запрашивает пользовательскую загрузку, она всегда открывает новое окно, пытающееся отобразить XML.

Существует ли хороший способ сделать то, что я хочу в стороне клиента JavaScript? Я хотел бы, чтобы это работало в сегодняшних браузерах, идеально Firefox, MSIE 8 и Chrome.

Обновление с демонстрационным кодом Downloadify

window.onload = function() {
  Downloadify.create("dlify", {
    data: getData(),
    filename: "data.xml",
    swf: 'media/downloadify.swf',
    downloadImage: 'images/download.png',
    width: 100, height: 30});};

13
задан Community 23 May 2017 в 12:16
поделиться

2 ответа

Лучшее, что я видел, это Downloadify от Doug Neiner, он требует Flash, но работает очень хорошо:

"Крошечная библиотека JavaScript + Flash, которая позволяет создавать и сохранять файлы на лету, в браузере, без взаимодействия с сервером."

Посмотрите это видео.

5
ответ дан 2 December 2019 в 01:57
поделиться

Если Flash является опцией, то Flash Player (версия 10+) предлагает средства для ограниченного чтения/записи файлов из локальной файловой системы.

Посмотрите здесь:

http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/net/FileReference.html#save%28%29

1
ответ дан 2 December 2019 в 01:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: