Я пишу некоторый код 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});};
Лучшее, что я видел, это Downloadify от Doug Neiner, он требует Flash, но работает очень хорошо:
"Крошечная библиотека JavaScript + Flash, которая позволяет создавать и сохранять файлы на лету, в браузере, без взаимодействия с сервером."
Посмотрите это видео.
Если Flash является опцией, то Flash Player (версия 10+) предлагает средства для ограниченного чтения/записи файлов из локальной файловой системы.
Посмотрите здесь:
http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/net/FileReference.html#save%28%29