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

时间:2010-03-22 01:23:23

标签: javascript browser download

我正在编写一些在客户端生成XML文档的Javascript代码(通过Google Earth plugin)。我希望用户能够单击页面上的按钮,并提示将该XML保存到新文件。如果我在生成XML服务器端这很容易,只需按下按钮即可打开链接。但是XML是在客户端生成的。

我想出了一些半工作的黑客,部分受到this StackOverflow question的启发。但是没有完全奏效。这是一个带有嵌入代码的演示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中运行不佳(无法保存,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});};

2 个答案:

答案 0 :(得分:5)

我见过的最好的是Downloadify Doug Neiner,它需要Flash,但效果非常好:

  

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

选中video

答案 1 :(得分:1)

如果Flash是一个选项,那么Flash Player(版本10+)提供了从本地文件系统有限读取/写入文件的方法。

检查出来:

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