我正在编写一些在客户端生成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});};
答案 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