我需要以编程方式在客户端存储数据,而不必在每次页面加载时从服务器传输数据。我考虑为用户当前会话生成一个包含所需数据的动态 JavaScript 文件,并确保它被缓存,但这看起来真的很混乱,而且我可以想到这种方法有一些缺点。
如何在客户端存储持久数据?
我需要以编程方式在客户端存储数据,而不必在每次页面加载时从服务器传输数据。我考虑为用户当前会话生成一个包含所需数据的动态 JavaScript 文件,并确保它被缓存,但这看起来真的很混乱,而且我可以想到这种方法有一些缺点。
如何在客户端存储持久数据?
您可以使用Web Storage API (Window.localStorage
或Window.sessionStorage
)。查看html5doctor上的这篇文章以获得更深入的解释。目前所有现代浏览器都支持Web Storage API。
只读的 localStorage 属性允许您访问 Document 来源的 Storage 对象;存储的数据跨浏览器会话保存。localStorage 与 sessionStorage 类似,不同之处在于,虽然 localStorage 中存储的数据没有过期时间,但sessionStorage 中存储的数据会在页面会话结束时(即页面关闭时)被清除。
https://developer.mozilla.org/en/docs/Web/API/Window/localStorage
如上所述:
Window.localStorage
.Window.sessionStorage
.有两种通过Window.localStorage
和Window.sessionStorage
API 设置和获取属性的方法:
直接访问属性:
localStorage.name = 'ashes999';
console.log(localStorage.name); // ashes999
delete localStorage.name;
console.log(localStorage.name); // undefined
sessionStorage.name = 'ashes999';
console.log(sessionStorage.name); // ashes999
delete sessionStorage.name;
console.log(sessionStorage.name); // undefined
使用Storage.setItem
、Storage.getItem
和Storage.removeItem
API 方法。
localStorage.setItem('name', 'ashes999');
console.log(localStorage.getItem('name')); // ashes999
localStorage.removeItem('name');
console.log(localStorage.getItem('name')); // undefined
sessionStorage.setItem('name', 'ashes999');
console.log(sessionStorage.getItem('name')); // ashes999
sessionStorage.removeItem('name');
console.log(sessionStorage.getItem('name')); // undefined
您可以将数据存储在 中window.name
,其中最多可容纳 2MB 的数据 (!)。
/* on page 1 */
window.name = "Bla bla bla";
/* on page 2 */
alert(window.name); // alerts "Bla bla bla"
编辑:还可以查看有关此的Ajaxian 文章。
请注意,同一选项卡/窗口中的其他站点也可以访问window.name
,因此您不应在此处存储任何机密信息。
如果你真的需要这样做(我绝对怀疑这是一个好主意),你的额外 javascript 文件想法并不像你想象的那么糟糕。只需使用 JSON 表示法来保存数据,并且根据需要很容易加载和卸载。如果您保留一些经过深思熟虑的逻辑划分,您也应该能够按需更新其中的一部分。
谷歌齿轮怎么样。它是为离线存储而设计的,但我认为它可能会起作用。 http://code.google.com/apis/gears/design.html
从文档中:
存储用户数据
不仅仅是静态文件的应用程序具有通常存储在服务器上的数据。为了使应用程序在离线时有用,这些数据必须可以在本地访问。数据库模块提供了一个用于存储数据的关系数据库。在架构页面上,您将找到有关设计应用程序所需的本地存储的策略的讨论。
当离线应用程序重新连接时,您需要将本地数据库中所做的任何更改与服务器同步。同步数据有许多不同的方法,没有一种完美的方法。架构页面描述了一些同步策略。
Gears 数据库的一个附加功能是全文搜索,它提供了一种在数据库文件中搜索文本的快速方法。在此处阅读详细信息。
Web Storage API的本地存储限制为 5MB,但可以使用IndexedDB在客户端存储更多数据。在一些较新的浏览器中,还可以使用Service Workers缓存数据以供离线使用。
URL 片段也可以存储客户端数据,尽管它们在大多数浏览器中只能存储几千个字符。
客户端存储通常仅限于一个源,尽管可以使用postMessage()
.