这篇文章由 Jeff Balogh 撰写。Jeff 是 Mozilla 的 网页开发团队 成员。
在 Firefox 3.5 中新增加的 localStorage
是 Web 存储 规范的一部分。localStorage
提供了一个简单的 Javascript API 用于在浏览器中持久保存键值对。不要将其与 SQL 数据库存储 提议混淆,后者是 Web 存储规范中一个独立的(更具争议性)部分。键值对原则上可以在 cookie 中存储,但你不会想那样做。 cookie 在每次请求时都会发送到服务器,这会导致大型数据集的性能问题以及潜在的安全问题,并且你必须编写自己的接口来将 cookie 当作数据库一样对待。
这里有一个小型演示程序,它将 textarea
的内容存储在 localStorage
中。你可以更改文本,打开一个新标签页,并找到更新后的内容。或者你可以重新启动浏览器,你的文本仍然存在。
使用 localStorage
最简单的方法是将其像普通对象一样对待
>>> localStorage.foo = 'bar'
>>> localStorage.foo
"bar"
>>> localStorage.length
1
>>> localStorage[0]
"foo"
>>> localStorage['foo']
"bar"
>>> delete localStorage['foo']
>>> localStorage.length
0
>>> localStorage.not_set
null
对于喜欢这种方式的人来说,还有一种更冗长的 API
>>> localStorage.clear()
>>> localStorage.setItem('foo', 'bar')
>>> localStorage.getItem('foo')
"bar"
>>> localStorage.key(0)
"foo"
>>> localStorage.removeItem('foo')
>>> localStorage.length
0
如果你想拥有一个映射到当前会话的 localStorage
数据库,可以使用 sessionStorage
。它与 localStorage
具有相同的接口,但 sessionStorage
的生命周期仅限于当前浏览器窗口。你可以在同一个窗口中四处跳转链接,sessionStorage
会被保留(转到不同的网站也可以),但是一旦该窗口关闭,数据库就会被删除。localStorage
用于长期存储,正如 w3c 规范中所指示的那样,浏览器应将数据视为“可能对用户至关重要”。
当我发现 localStorage
只能存储字符串时,我有点失望,因为我当时希望它能够存储更结构化的东西。但是借助 原生 JSON 支持,很容易在 localStorage
之上创建一个对象存储。
Storage.prototype.setObject = function(key, value) {
this.setItem(key, JSON.stringify(value));
}
Storage.prototype.getObject = function(key) {
return JSON.parse(this.getItem(key));
}
localStorage
数据库的范围限定为一个 HTML5 来源,基本上是三元组 (scheme, host, port)
。这意味着数据库在同一个域中的所有页面之间共享,即使在多个浏览器标签页中同时使用也是如此。但是,通过 http://
连接的页面无法看到在 https://
会话期间创建的数据库。
localStorage
和 sessionStorage
由 Firefox 3.5、Safari 4.0 和 IE8 支持。你可以在 quirksmode.org 上找到更多兼容性详细信息,包括关于 存储事件 的更多细节。
37 条评论