JavaScript使⽤localStorage存储数据
背景
以前js都是 Session 和 Cookie 来存储信息,仿佛我还停留在那个时候,⼀问同事有没有新的solution,才知道现在已经有HTML5 localStorage 本地存储这个东西,可以在浏览器端储存数据。
记得最早的Cookies只能存很⼩的东西,4KB的样⼦,并且安全性很差,在IE6时代⼀个域名也只能⼆⼗个Cookies吧,限制挺⼤,当然IE还有userData的东西,没什么⽤。Flash也带了⼀个Storage,相对⽐较⼤,空间是Cookie的25倍左右,当时现在也废弃Flash了。
到了H5时代,就统⼀了,LocalStorage⼀统天下。官⽅建议是每个⽹站 5MB ,⾮常⼤了,虽然浏览器设置会有差异,但是⼀般就存些JSON或者字符串或者缓存来说,⾜够了。
HTML5 LocalStorage 本地存储
sessionStorage:保存的数据⽤于浏览器的⼀次会话,当会话结束(通常是该窗⼝关闭),数据被清空;
localStorage:保存的数据长期存在,下⼀次访问该⽹站的时候,⽹页可以直接读取以前保存的数据。除了保存期限的长短不同,这两个对象的属性和⽅法完全⼀样。
它们很像cookie机制的强化版,虽然能够动⽤⼤得多的存储空间。但是,与cookie⼀样,它们也受同域限制。某个⽹页存⼊的数据,只有同域下的⽹页才能读取。
通过检查window对象是否包含 sessionStorage 和 localStorage 属性,可以确定浏览器是否⽀持这两个对象。
function checkStorageSupport()
{
// sessionStorage
if (window.sessionStorage) {
return true;
} else {
return false;
}
// localStorage
if (window.localStorage) {
return true;
} else {
return false;
}
}
Storage 操作
sessionStorage 和 localStorage 保存的数据,都以 “Key-Value键值对” 的形式存在。也就是说,每⼀项数据都有⼀个键名和对应的值。所有的数据都是以⽂本格式保存。
//sessionStorage 操作
sessionStorage.setItem("key","value"); // setItem⽅法,存储变量名为key,值为value的变量
var valueSession = Item("key"); // getItem⽅法,读取存储变量名为key的值
sessionStorage.clear(); // clear⽅法,清除所有保存数据
//localStorage 操作
localStorage.setItem("key","value"); // 存储变量名为key,值为value的变量
sessionstorage和localstoragelocalStorage.key = "value" // 同setItem⽅法,存储数据
var valueLocal = Item("key"); // 读取存储变量名为key的值
var valueLocal = localStorage.key; // 同getItem,读取数据
localStorage.clear(); // clear⽅法,清除所有保存的数据
// 利⽤length属性和key⽅法,遍历所有的数据
for(var i = 0; i < localStorage.length; i++)
{
console.log(localStorage.key(i));
}
// 存储 localStorage 数据为 Json 格式
value = JSON.stringify(jsonValue); // 将 JSON 对象 jsonValue 转化成字符串
localStorage.setItem("key", value); // ⽤ localStorage 保存转化好的的字符串
// 读取 localStorage 中 Json 格式数据
var value = Item("key"); // 取回 value 变量
jsonValue = JSON.parse(value); // 把字符串转换成 JSON 对象
Storage 事件
当储存的数据发⽣变化时,会触发 storage 事件。我们可以指定这个事件的回调函数。
window.addEventListener("storage",onStorageChange);
回调函数接受⼀个event对象作为参数。这个event对象的key属性,保存发⽣变化的键名。
function onStorageChange(e)
{
console.log(e.key);
}
除了key属性,event对象的属性还有三个:
oldValue:更新前的值。如果该键为新增加,则这个属性为null。
newValue:更新后的值。如果该键被删除,则这个属性为null。
url:原始触发storage事件的那个⽹页的⽹址。
特别注意的是,该事件不在导致数据变化的当前页⾯触发。如果浏览器同时打开⼀个域名下⾯的多个页⾯,当其中的⼀个页⾯改变sessionStorage或localStorage的数据时,其他所有页⾯的storage事件会被触发,⽽原始页⾯并不触发storage事件。可以通过这种机制,实现多个窗⼝之间的通信。所有浏览器之中,只有IE浏览器除外,它会在所有页⾯触发storage事件。
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论