如何在Javascript中动态创建文档以供下载?

Nel*_*son 13 javascript browser download

我正在编写一些Javascript代码,用于在客户端生成XML文档(通过Google Earth插件).我希望用户能够单击页面上的按钮并提示将该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>
Run Code Online (Sandbox Code Playgroud)

dlDataURI()版本在Firefox中运行良好,在Chrome中运行不佳(无法保存),在IE中根本不运行.Window()版本在Firefox和IE中运行良好,在Chrome中运行不佳(无法保存,HTML内嵌的XML).这两个版本都没有提示用户下载,它总是打开一个试图显示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});};
Run Code Online (Sandbox Code Playgroud)

CMS*_*CMS 5

据我见过的最好的是Downloadify道格Neiner,它需要Flash,但工作得非常好:

"一个小型的JavaScript + Flash库,可以在浏览器中动态生成和保存文件,无需服务器交互."

观看视频.

  • 上面的URL已经死了.看起来你可以在github上找到downloadify:https://github.com/dcneiner/Downloadify (2认同)