• 数据存储(二)WebStorage 之 sessionStorage、globalStorage、localStorage


    参考:《JavaScript 高级程序设计》(第3版)

     扩展:

    数据存储(一)Cookie_不头秃的码农的博客-CSDN博客_cookie存数据

    数据存储(三)WebStorage 之 IndexedDB_不头秃的码农的博客-CSDN博客

    文章伊始,抛出两个面试问题:

    sessionStorage在多窗口之间是否能共享状态?

    sessionStorage数据存储在哪里?

    答案请往下探索 ~~~

    Web Storage 是 HTML5 规范中提出的,目的是客服 cookie 带来的限制,当数据存储在客户端时,无需持续的跟随请求发送回服务器。

    Web Storage 规范早期包含 sessionStorage 和 globalStorage,后面修订版更改为 sessionStorage 和 localStorage。

    1. Storage 类型

    Storage 类型提供最大的存储空间来存储名值对字符串。(非字符串数据在存储之前会被转换成字符串)

    Storage 的实例有以下几种方法、属性:

    getItem(name)获取指定name对应的值FireFox 中没有实现
    setItem(name,value)为指定的name设置一个对应值
    removeItem(name) 删除由name指定的 名值 对不建议使用delete来删除数据,避免兼容性等问题
    clear()删除所有值
    key(index)获取index位置处的名字
    length获取Storage中存储了多少名值对可以结合key和length来迭代存储的数据
    remainingSpace获取还可以使用的存储空间字节数IE8 独有

    2. sessionStorage

    存储特定的某个会话的数据。

    sessionStorage 会话数据特性:

    • 不可跨越会话,浏览器关闭,数据被删除;
    • 跨越浏览器刷新而存在(即同一页面,执行刷新,会话数据还在);
    • 浏览器崩溃并重启之后,FireFox 和 WebKit 的会话数据仍存在,IE 不存在;
    • 会话数据只能被最初给对象存储数据的页面访问,所以对多页面有限制;
    • 在该标签或窗口打开一个新页面时会复制顶级浏览会话的上下文作为新会话的上下文;
      • 只有在本页面中以新页签或窗口打开的同源页面会复制(临时共享)之前页面的sessionStorage;
        • 例如window.open("同源页面"),a标签打开同源页面等等。
      • 当在前一个页面中继续进行sessionStorage写入时,新标签页不会再同步。

    浏览器写入 sessionStorage 数据方式:

    FireFox 和 WebKit 是同步写入。即添加到存储空间的数据立即被提交。

    IE 是异步写入。即设置数据和写入数据有一定时间间隔。

    • IE8 中可以强制把数据立即写入磁盘
    1. // 只适用于IE8
    2. sessionStorage.begin(); // 调用begin方法,开始收集数据。
    3. sessionStorage.name = "不头秃的码农";
    4. sessionStorage.book = "JavaScript";
    5. sessionStorage.commit(); // 调用commit后,立即被写入磁盘。

    3. globalStorage

    跨越会话存储信息。(实现于 FireFox2 ,在修订版 HTML5 中被 localStorage 取代)

    globalStorage 不是 Storage 的实例,globalStorage["wrox.com"] 才是。

    使用方法:指定可以访问该数据的域

    1. // ==================== 保存数据 ====================
    2. // 存储数据于wrox.com域名下
    3. globalStorage["wrox.com"].name = "不头秃的码农";
    4. // 存储的数据,所有域名都可以访问(危险)
    5. globalStorage[""].name = "不头秃的码农";
    6. // 如果事先不能确定域名,可使用location.host作为属性名比较安全。
    7. globalStorage[location.host].name = "不头秃的码农";
    8. // ==================== 获取数据 ====================
    9. let name1 = globalStorage["wrox.com"].name;
    10. let name2 = globalStorage[""].name;
    11. let name3 = globalStorage[location.host].name;

    同源限制,例如:

    使用 http 协议在 wrox.com 中存储了数据,使用 https 访问 wrox.com 的页面,获取不到数据。

    尺寸限制,因浏览器而异:

    Chrome、Safari、IOS 版 Safari、Android 版 WebKit 限制是 2.5M,

    IE8、Opera 限制是 5M。

    若不使用 removeItem、delete、clear 等方法删除,也没清理浏览器缓存,存储在  globalStorage 上的数据会一直存在于磁盘上。

    适用于:在客户端存储文档、或者保存用户偏好设置。

    4. localStorage

    4.1 简介

    在修订过的 HTML5 规范中取代了 globalStorage,作为持久保存客户端的数据方案。

    localStorage 相当于 globalStorage[location.host]。

    localStorage 是 Storage 的实例。

    1. // 使用方法存储数据
    2. localStorage.setItem('name', '不头秃的码农');
    3. // 使用属性存储数据
    4. localStorage.book = 'JavaScript';
    5. // 使用方法读取数据
    6. let name = localStorage.getItem('name');
    7. // 使用方法读取数据
    8. let book = localStorage.book;

    数据存储在磁盘上,可跨会话取用,可通过Storage方法删除或通过清除浏览器缓存删除。

    同源限制:

    要访问localStorage,页面必须来自同一域名、同一协议、同一端口号。

    尺寸限制:

    Chrome、Safari、IOS 版 Safari、Android 版 WebKit 限制是 2.5M,其他是 5M。

    4.2 storage 事件 

    对Storage对象进行任何修改,都会触发storage事件。

    这个事件的event对象有以下属性:

    domain发生变化的存储空间域名
    key设置或删除的键名
    newValue如果是设置值,则是新值;如果是删除键,则是null
    oldValue键被更改之前的值

    侦听storage事件:

    一定要关注下面写的监听条件哦 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

    1. /**
    2. * 监听storage事件条件:
    3. * 当不在同一标签页的同一页面localStorage变动时,会触发storage事件
    4. * 即:两个标签页展示同一页面,B页面会监听到A页面localStorage发生的变动
    5. */
    6. window.addEventListener("storage", function (e) {
    7. console.log("监听到storage事件:", e);
    8. });
    9. localStorage.setItem("nameText", "不头秃的码农");
    10. setTimeout(() => {
    11. localStorage.removeItem("nameText");
    12. }, 1000);

  • 相关阅读:
    hadoop-2.7.3安装
    论坛介绍 | COSCon'23 开源文化(GL)
    初识uboot
    Vue进阶(幺陆伍)PhantomJS 实战讲解
    Qemu 启动无法交互的处理方法
    SLAM从入门到精通(gmapping建图)
    markdown希腊字母
    java.lang.Float类下floatValue()方法具有什么功能呢?
    group_concat多行合并成一行
    交通流预测——day59 交通网络动态性与多权重交通图卷积(MW-TGC)网络的交通预测
  • 原文地址:https://blog.csdn.net/weixin_44137575/article/details/128022030