localStorage 是 HTML5 中一个新的 JavaScript API,允许我们将数据以键值对的形式保存在用户的浏览器中。它有点像 Cookie 除了:
- Cookie 会过期并被清除很多次,localStorage 则永久存在(直到显式清除)。
- localStorage 不会在 HTTP 请求中发送,您需要手动请求它。
- 您可以在 localStorage 中存储比 Cookie 更多的数据。
- localStorage 的 API 非常简单易用。
如果您需要了解更多信息,我最近制作了一个关于 localStorage 的 视频教程。这就是它的工作原理
/* Set some data */
localStorage.setItem("key", "value");
/* Get some data */
localStorage.getItem("key");
无需任何库,这仅仅是 JavaScript。如果需要,您可以使用 Modernizr 先用 Modernizr.localstorage 进行测试。
好的,这些都是技术细节,让我们看看网络上哪些地方可以使用、应该使用或正在使用它。希望这能激发您自己网站的一些想法。
正在使用 localStorage

Snapbird(一个强大的 Twitter 搜索工具)会记住您上次搜索的人员的流。可以想见,下次您回来时,您可能会搜索同一个人,这可以为您节省一秒钟。如果不是,您可以将其删除并替换。我发现它很有用,因为我通常试图找到自己以前发布的推文。

今年的 Webbie Madness 活动有一个大型的 March Madness 风格的投票网格,鼓励人们在多轮比赛中选择获胜者。第一轮有 32 人参加 16 场比赛。人们的名字被隐藏了。要弄清楚谁是谁以及决定投票给谁需要一段时间,而且这不是我能够一次完成的事情。我建议他们将投票结果保存到 localStorage 中,这样您就可以随时回来完成。就像真正的狠角色一样,他们做到了!

JSBin(由 Remy Sharp 创建,他也是 Snapbird 的开发者,可以想见)允许您保存您的初始 HTML/JavaScript 模板,以便下次您回来使用它时,可以使用相同的模板。
应该使用 localStorage

Typekit 在查看特定字体时有一个字体测试工具。您可以在框中输入自己的文本以查看该字体中的显示效果。不幸的是,当您切换到另一种字体时,您输入的自定义文本会消失。这将是 localStorage 的一个很好的使用案例。当该区域的值发生变化时,将其保存到 localStorage,并在页面加载时加载该值。我认为这将是一个很好的节省时间的方法,因为我认为在多个字体中查看文本是一种非常常见的用例。

CSS Lint 有一个复选框网格,用于您在测试 CSS 时是否希望 CSS Lint 检查哪些功能。如果它使用 localStorage 来记住您使用的复选框配置,那就太好了,这样如果您重新加载页面或稍后返回,它仍然是相同的。因此,如果您不喜欢“不要使用 ID”复选框,您可以将其永久关闭=)。

几乎任何具有登录表单的网站都可以使用 localStorage 来保存用户名。因此,当用户返回时,他们登录所需的步骤减少了一步。

Zeldman.com 在页脚中有一些链接,允许您在网站上使用的两种版本之间切换颜色。它将其保存为 Cookie,这很好,但容易受到 Cookie 的脆弱性的影响。任何具有备用样式选择(例如字体大小切换)的类似网站都可以将这些信息保存在 localStorage 中,并使其持久性更好。
更多
这仅仅是冰山一角。我相信拥有更多开发人员思维的人可以想到更大更好的想法。保存游戏进度?缓存资产?您还有什么想法?
您的代码片段第 5 行有错别字。
localStorage.setItem("key");(应该是 getItem)
除此之外,文章很棒,谢谢。
谢谢 Kyle!(埋葬它因为它不再重要了)
谢谢 Chris。我最近在 Dive Into HTML5 上发现了这个。您确实激励我在自己的项目中尝试一下。
最终用户可以访问本地存储吗?如果在计算机(可能是公开的)上存储登录信息,似乎其他人可以访问。
完全可以访问。尝试访问一个使用它的网站,并在浏览器控制台中输入localStorage,您将看到所有已保存的内容
是的,LocalStorage 会保存信息,但您可以在会话结束时使用 sessionStorage.clear(); 清除数据。
作为一个黄金法则,当您在同一个句子中听到“纯文本”和“登录信息”时,那就是不好的。
感谢 localStorage。我想为 我最新的游戏/网站 客户端存储一些东西,我本来打算使用 Cookie。幸运的是,localStorage 广泛可用,我最终用它来存储游戏积分(记住插入了多少硬币)、说明位置(仅显示一次)、记住哪些作品已被发现(在下次访问时在主页上显示)、音频状态(静音或非静音)以及其他一些技术方面的事情。
总的来说它们都很好,唯一的问题是您需要使用 JSON 来存储数组。
因此,在这些示例中(例如登录表单或 CSS Lint 复选框),为什么使用 localStorage 而不是 Cookie?
我在想登录示例也是一样。
精彩的文章 Chris。我以前不知道 localStorage,但它看起来非常简单,我打算试一试!
@Federico:大多数支持 localStorage 的浏览器也具有原生 JSON 解析器,因此您可以轻松地使用 JSON.stringify 和 JSON.parse 而无需库 :)
我认为 localStorage 根本不适用于更改网站样式。它只能被 Javascript(而不是服务器端)访问,因此您必须以默认颜色加载页面,然后使用 JS 进行切换。
我希望移动版 Twitter 客户端使用本地存储,以便如果您碰巧在没有网络覆盖的地方,可以收藏您想稍后阅读的推文。
这个很简单。我一定会试一试……我在浏览 HTML 5 教程时听说过这个。
我开发了一个使用 localStorage 的个人任务管理器。由于所有数据都存储为字符串(数据类型转换等),所以有点笨重。我甚至编写了一个名为 storeIt 的小型库,旨在扩展一些方法并使 localStorage 更简单(并且编写更简洁)。
https://github.com/brunolazzaro/storeIt
很棒…!!!但是唯一的问题是与服务器端脚本的同步。
其实不用,你可以创建一个ajax调用,将键值对发送到接收文件。
更多示例
像这样的联系或评论表单可以使用
localStorage(而不是cookie)在本地存储用户输入的数据。我在我的网站和jsPerf上都这么做了。http://mothereffingcssescapes.com/ 和 http://mothereffingunquotedattributes.com/ 都使用
localStorage来持久化用户输入,即使您刷新页面或意外关闭它。太棒了。如果更多的人想了解如何在表单中使用它,请查看文章顶部的链接,它会跳转到一个屏幕录制,整个视频都是关于在表单中使用它的。
很棒的例子,Chris。我个人很喜欢ColorZilla如何“记住”我创建的渐变。LocalStorage很棒,我相信我们很快就会在更多地方看到它。
谢谢,Chris!
一如既往,您的网站是我学习新事物的主要资源!LocalStorage 绝对棒极了!感谢分享!
祝您好运!
Grooveshark 是另一个已经使用 LocalStorage 的网站示例。
不错的例子,Chris,
我做了一个小程序,它将 JSON 存储在 localStorage 中。
您可以添加客户列表并为每个客户存储信息,例如贷记/借记信息 + 日期。
它扩展性不是很好,但可以完成工作 :)
https://github.com/leonzinger/Clients-management
另一种设置和获取方法:关联数组。
/* 设置一些数据 */
localStorage[“key”] = “value”;
/* 获取一些数据 */
alert(localStorage[“key”]);
谢谢!我发现这是一种更容易设置和获取的方法!
没问题 :)
有谁知道如何在本地机器上限制浏览器和网站可用的存储空间吗?
例如:在 Chrome、IE 和 Firefox 中,您可以将 TEMP 文件的大小限制为 200MB,这样您就知道在任何给定阶段您的浏览器都不会下载超过该大小的文件。
我看到的问题是——随着越来越多的网站开始使用本地存储,机器会被填满,用户不知道所有空间都去哪里了。
第二个问题:如果用户确实限制了存储空间,它是否以先进先出 (FIFO) 的方式工作?
显然,浏览器最多可以存储 5MB 而不会打扰用户。如果网站需要更多空间,它会询问。
用户名和密码默认情况下会保存在 Mozilla Firefox 中。
就在我以为自己无所不知的时候(好吧,其实不是),又出现了新东西,能不能给我们一些时间赶上进度,真是的……;)
此网站 (www.alisonshurville.co.uk) 使用相同的技术来记住为缩略图选择的布局模式。
查看:http://facturarapida.net,保存功能完全基于 localStorage。