Как мне динамически создать документ для загрузки в Javascript? - PullRequest
13 голосов
/ 22 марта 2010

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

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

<html><head><script>
function getData() { return '<?xml version="1.0" encoding="UTF-8"?><doc>Hello</doc>'; }
function dlDataURI() {
  window.open("data:text/xml;charset=utf-8," + getData());
}
function dlWindow() {
  var w = window.open();
  w.document.open();
  w.document.write(getData());
  w.document.close();
}
</script><body>
<div onclick="dlDataURI()">Click for Data URL</div>
<div onclick="dlWindow()">Click for Window</div>
</body></html>

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

Есть ли хороший способ сделать то, что я хочу, в Javascript на стороне клиента? Мне бы хотелось, чтобы это работало в современных браузерах, в идеале Firefox, MSIE 8 и Chrome.

Обновление с образцом Скачать код

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

Ответы [ 2 ]

5 голосов
/ 22 марта 2010

Лучшее, что я видел на данный момент, это Загрузка от Дуг Нейнер , требуется Flash, но работает очень хорошо:

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

Проверьте это видео .

1 голос
/ 22 марта 2010

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

Проверьте это:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...