Я пишу код 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});};