从JavaScript打开/保存本地(JSON)文件>> IE / Firefox的

时间:2011-02-22 14:19:45

标签: javascript json internet-explorer load local

我是JS的新手,我正在做一个小的html页面 - 现在 - 将在本地运行。我有一个JSON格式的字符串,我需要能够将其作为文件存储/加载到硬盘上。

为了能够存储字符串,我已经将它用于Firefox:

function saveJSON() {
    var obj = {name:'John', max:100};
    window.open( "data:text/json;charset=utf-8," + escape(JSON.stringify(obj)))
}

但是,它只适用于FF,我也需要能够使用Internet Explorer。我已经阅读了一些关于使用ActiveX的内容,但我还没有找到任何关于如何使用它的例子。

我应该尝试使用ActiveX,还是有更好的HTML / JS方法来保存适用于这两种浏览器的文件?


第二个问题是加载JSON文件。我发现一旦加载,我可以使用JSON.parse将其转换为JSON var。但我不知道如何加载选定的JSON文件。我有一个

<input type=file id="filePath"> 

获取文件路径(虽然它在两个浏览器中返回不同的东西),我希望能够做类似的事情

var a = loadFile(filePath.value)

有关如何操作的任何建议?我真的被困在这里,非常感谢任何帮助。

感谢。

3 个答案:

答案 0 :(得分:6)

要加载文件,它必须已存在于服务器上。然后可以将其作为脚本的一部分加载(延迟加载或包含在头部中) - 或者使用jQuery AJAX库的.load()方法加载。如果它不在服务器上,您需要先进行上传[这是为了防止XSS]。

您可以使用.load(),. get()或完整的.ajax()jQuery调用从该点提取数据。看这里:http://api.jquery.com/load/

为了保存数据 - 使用cookie以这种方式存储数据,将数据发布到新窗口(表单提交),或者如果您仍然希望它在查询字符串中,则您的方法应该有效。

注意我使用不同的JSON库,但以下在IE和FF中执行。


  $(document).ready(function() {
    var obj = { name: 'John', max: 100 };
    window.open("data:text/json;charset=utf-8," + escape($.toJSON(obj))) 
  })

我建议通过它,你会做类似的事情:


  function saveJSON(){
    var obj = {};
    obj.name = 'John';
    obj.max = 100;

    $("#json").val($.toJSON(obj));
    $("#hiddenForm").submit();
  }

一个包含它的简单形式......

<form action="somepageToDisplayFormFields.php" target="_blank" id="hiddenForm">
  <input type="hidden" name="json" id="json" />
</form>

这将允许您传递更多(和更复杂)的对象,而不会遇到URI大小限制和跨浏览器功能差异。再加上尝试解决escape(),escapeURIComponent()等问题......最终会让你疯狂。

答案 1 :(得分:2)

好吧,我找到a solution来阅读一个非常好用的客户端文件。它也不是完全不安全,因为“直接和有意的用户干预需要将单个文件暴露给脚本”。目前它仅适用于Firefox,所以我想我现在必须解决这个问题。

谢谢大家的意见和回答;他们非常乐于助人,我学到了很多东西。

答案 2 :(得分:1)

直接文件系统操作通常是客户端javascript不允许的(有充分的理由。希望随机网站在你的文件中浏览?))

尽管如此,你可以或多或少地通过使你的JSON成为下载链接来实现你的第一个目标 - 将你的数据网址放入链接的href中,并且应该在IE中以IE8开始工作。对于旧的IE,你是SOL。

至于从路径获取JSON文件,有一个PROPRIETARY,FIREFOX ONLY属性,允许您执行此操作。记录在此:https://developer.mozilla.org/en/DOM/File