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

如何在Javascript中动态创建供下载的文档?,javascript,browser,download,Javascript,Browser,Download,我正在编写一些Javascript代码,用于在客户端(通过)生成XML文档。我希望用户能够单击页面上的按钮,并被提示将该XML保存到新文件中。如果我正在生成XML服务器端,这将很容易,只需使按钮打开链接即可。但是XML是在客户端生成的 我已经想出了两个半途而废的技巧,部分灵感来自于。但两者都不完全有效。下面是一个带有嵌入式代码的演示HTML: <html><head><script> function getData() { return '<?xml

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

我已经想出了两个半途而废的技巧,部分灵感来自于。但两者都不完全有效。下面是一个带有嵌入式代码的演示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>

到目前为止,我所看到的最好的是,它需要Flash,但效果非常好:

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


选中此项。

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

看看这个:


好的,我的答案中链接到的API的包装器。很好。谢谢你的指点,那是一个很棒的小图书馆。自由软件许可证,相对容易使用。遗憾的是,它需要Flash,但如果Javascript无法应对,我并不感到惊讶。注意:下载通过闪存保存到磁盘,不通过浏览器的下载管理器。我将用一段代码片段来更新我的问题,演示这个库是如何工作的。上面的URL已经死了。看起来你可以在github上找到downloadify:这个较新的堆栈溢出问题有很多答案,不需要Flash。大多数涉及在DOM中构造
数据:
URL。
window.onload = function() {
  Downloadify.create("dlify", {
    data: getData(),
    filename: "data.xml",
    swf: 'media/downloadify.swf',
    downloadImage: 'images/download.png',
    width: 100, height: 30});};