如何使用JavaScript在客户端保存文件?

时间:2011-11-10 14:21:01

标签: javascript jquery java-ee

我想将JSON对象保存到客户端的文件中以保留它以供将来使用,我尝试过以下行

window.open("data:text/json;charset=utf-8," + escape(JSON.stringify(obj)));

它有效!!问题是它询问用户保存文件的位置和名称。我想要的是我希望用户完全不知道正在保存某些东西以备将来使用,或至少保持最小的用户点击次数。

如何在window.open()中静态提供文件名和位置

提前致谢,

修改

只是要说清楚“我不存储任意或不需要的数据。所有用户都是系统的注册用户。”在正常情况下,我不会在本地存储任何东西。但是,如果在表单提交时网络不可用,我想存储一些JSON对象。

一个明显的解决方案是使用cookie。由于用户的浏览器设置可能会意外删除Cookie。我需要一种方法来持久保存数据,直到网络可用。拥有跨浏览器支持会更好。

6 个答案:

答案 0 :(得分:7)

如果您想保留数据,然后使用a storage API,则无法使用用户的文件系统玩游戏。

答案 1 :(得分:4)

你不能这样做,这是客户端的安全问题。

答案 2 :(得分:2)

  

我想要跨浏览器支持的值,即使用户更改浏览器他/她应该能够从他离开的地方继续。我将信息存储在JSON对象中。

我认为用户不希望Web应用程序以这种方式与同一台机器上的其他浏览器共享信息。此外,我怀疑许多用户过于频繁地更改浏览器以保证这样的隐私侵入功能。您应该考虑在服务器上存储信息(通过强制用户注册或使用OpenID,Google,Facebook等常用帐户),或者通过设置cookie或使用提到的存储技术在客户端存储信息。

如果您确实要将存储的信息限制在同一台计算机上的浏览器中,并且不希望允许同一用户在不同的计算机上访问,您可以查看LSO('Flash cookies' )似乎保存浏览器独立。您不需要任何用户确认来存储LSO。

更新:浏览器不支持Flash,因为以前并没有广泛使用,因此LSO不再是一个好的选择。

答案 3 :(得分:2)

FileSystem API HTML5规范的一部分,可以在现代浏览器中的某个网站的沙箱中访问文件系统,这是一个很好的教程: http://www.html5rocks.com/en/tutorials/file/filesystem/

但是我会使用LocalStorage API来获得更好的浏览器支持: http://www.w3schools.com/html5/html5_webstorage.asp

答案 4 :(得分:2)

FSO.js包装临时/持久性FileSystem API,允许您轻松读取/写入文件......目前仅Chrome支持,但规范正在迅速发布。 :)

答案 5 :(得分:1)

正如评论中已经提到的,出于明显的安全原因,如果没有明确的用户同意,这是不可能的。但是,正如评论中所提到的,您可以将信息存储在cookie中,然后在用户返回时可以检索该信息。

这样的事情会做到这一点

document.cookie="cookie_name="+required_value+"; expires=Monday, 04-Dec-2011 05:00:00 GMT";

显然,只要您需要信息持续,过期时间就会过去。

希望有所帮助