javascript - 如何将 JavaScript 字符串下载为文件

标签 javascript ajax file-io

应用程序通过 AJAX 从服务器请求 KML 数据。此数据存储在 javascript 变量中,并显示在 Google 地球插件中。

在 javascript 中,如何提供一个链接来下载存储在 javascript 变量中的 KML 数据(作为字符串)而不需要向服务器发回请求?

此链接: http://forum.mootools.net/viewtopic.php?id=9728

建议使用数据 URI,但这可能无法满足我需要的足够多的浏览器。可能最简单的方法就是返回服务器再次获取数据以供下载,但很好奇是否有人使用 javascript 实现了这一点。

最佳答案

简短的回答:你不能而且仍然是平台独立的。大多数浏览器只是不允许 javascript 操作文件系统。

就是说,您也许可以通过一些非常特定于平台的 hack 来逃脱。例如,IE 提供了 execCommand 函数,您可以使用它来调用 SaveAs。如果您在具有要保存的数据的 IFrame 中执行此操作,您可能会使其工作——但仅限于 IE。其他选项(同样,我将在此处针对 Microsoft)包括 this Silverlight hack , 或 ActiveX 控件。

我认为要获得完整的平台兼容性,您只需要接受并提供服务器端下载选项即可。

[编辑] 哎呀!当我寻找链接时,我没有做足够的尽职调查。原来我链接到的 Silverlight hack 有一个服务器端组件。看起来你很 SOL。

[编辑2] 我找到了 execCommand here 浏览器兼容性的一个很好的总结。 .尽管它列出了“saveas”命令的问号,但也许这对您来说毕竟是一条不错的路线。也许值得一试?

[编辑3] 好吧,我决定对我建议的方法进行概念验证,并且我在 IE 中得到了一些相当简单的工作。不幸的是,我在这个过程中证明了这种方法will not work for Firefox并且似乎也不适用于 Chrome/Safari。所以它非常依赖于平台。但它有效!这是一个完整的工作页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Javascript File Saver</title>
    <script type="text/javascript">
      function PageLoad() {
        var fdoc = window.frames["Frame"].document;
        fdoc.body.appendChild(fdoc.createTextNode("foo,bar,baz"));
      }
      function Save() {
        var fdoc = window.frames["Frame"].document;
        fdoc.execCommand("SaveAs", true);
      }
    </script>
</head>
<body onload="PageLoad();">
<h2>Javascript File Saver</h2>
<iframe id="Frame" style="width: 400px;">Noframe</iframe><br />
<button onclick="Save();">Save</button>
</body>
</html>

关于javascript - 如何将 JavaScript 字符串下载为文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/566922/

相关文章:

php - 如何从同一个客户端对同一个页面执行多个 HTTP 请求

javascript - 嵌套的 jQuery AJAX 请求以奇怪的顺序完成

C++ : Read/Write Binary data to file when data is complex

javascript - 如何在运行时从另一个列表填充选择列表?

javascript - 调整下拉菜单位置

javascript - Array.prototype.forEach 在 IE8 中不起作用

javascript - 在 HTML 文档中包含 JS 和 CSS?

jquery - 关于使用 Webmatrix 和 AJAX 的基本问题

c - 如何在C中读取/写入文件到目录?

python - 在 python 中读取大 csv 文件的行