在javascript中生成一些xml,如何提示用户保存它?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

我想在JavaScript中创建一个XML文档,然后出现一个保存对话框。

  1. 如果他们必须在保存发生之前点击,这没关系。
  2. 如果我*有使用IE来实现这一点(我根本不需要支持它),它就是*不是* OK。但是,Windows是必需的平台(因此,如果我只能在一个浏览器中执行此操作,则Firefox或Chrome是首选浏览器)。
  3. 如果我需要一台网络服务器,它不是*可以。但相反,我不想要JavaScript只在本地文件上运行,即提升特权 - 如果可能的话。也就是说,我想在本地运行或在* static *主机上运行。但只在当地是可以的。

到目前为止,我看到的唯一想法是将XML保存到iframe并保存该文档 - 但似乎只能在IE中执行此操作?另外,我可以构建一个数据URI并将其放置在链接中。我的担心是它只会在窗口中打开XML文件,而不是提示用户保存它。

我知道,如果我需要JavaScript是本地的,我可以提高权限并直接保存文件(或希望导致保存对话框出现)。

提问于
用户回答回答于

这个downloadify脚本怎么样?

它基于Flash和jQuery,它可以提示你用对话框保存你电脑中的文件。

Downloadify.create('downloadify',{
  filename: function(){
    return document.getElementById('filename').value;
  },
  data: function(){ 
    return document.getElementById('data').value;
  },
  onComplete: function(){ 
    alert('Your File Has Been Saved!'); 
  },
  onCancel: function(){ 
    alert('You have cancelled the saving of this file.');
  },
  onError: function(){ 
    alert('You must put something in the File Contents or there will be nothing to save!'); 
  },
  swf: 'media/downloadify.swf',
  downloadImage: 'images/download.png',
  width: 100,
  height: 30,
  transparent: true,
  append: false
});
用户回答回答于

使用base64编码的数据URI,只有html&js才有可能。你可以做的是将你想要保存的数据(在你的案例中是一串XML数据)编码到base64中,使用jlo库(如carlo的jquery-base64)。然后将编码后的字符串放入链接中,并将链接添加到DOM。

使用我提到的库(以及jquery)的示例:

<html>
<head>
    <title>Example</title>
</head>
<body>
    <script>
        //include jquery and jquery-base64 here (or whatever library you want to use)
        document.write('<a href="data:application/octet-stream;base64;charset=utf-8,' + $.base64.encode( "this is a example, which requires the jquery-base64 library to work... replace this text with your xml" ) + '">click to make save dialog</a>');
    </script>
</body>
</html>

并记住要使内容类型application/octet-stream如此,以便浏览器不尝试打开它。

扫码关注云+社区