【web本地存储】storage事件,StorageEvent对象介绍

storage事件

Web Storage API 内建了一套事件通知机制,当存储区域的内容发生改变(包括增加、修改、删除数据)时,就会自动触发storage事件,并把它发送给所有感兴趣的监听者,因此,如果需要跟踪存储区域的改变,就需要在关心存储区域内容的页面监听storage事件

StorageEvent对象

storage事件的处理函数接受的event事件对象也和通常的事件对象不同,主要有如下:
在这里插入图片描述

  • key: 设置或删除或修改的键。
  • oldValue: 改变之前的旧值。如果是新增元素,则为null
  • newValue: 改变之后的新值。如果是删除元素,则为null
  • storageArea: 改对象是一个引用,指向发生变化的sessionStorage或localStorage;
  • url: 触发这个改变事件的页面的URL;
  • target: 当前窗口对象

注意点

  1. 只有在数据的内容确实发生改变的时候,才会触发storage事件。如果把一个值设置成一模一样的值,或删除一个根本就不存在的存储项,则不会触发storage事件。
  2. storage事件只会发送给同源、而且处于打开状态的其他页面,而不会发送给触发改变的页面本身及处于关闭状态的页面

和localStorage结合跨标签页数据通信

有两个页面:

页面一

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input type="text" width="200">
    <script>
        // 同步localStorage数据
        const input = document.querySelector('input');
        localStorage.setItem('demo', 'hello');
        input.addEventListener('blur', function () {
            console.log('blur -> ', input.value)
            localStorage.setItem('inputValue', input.value);
        })
    </script>
</body>
</html>

页面二

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input type="text" width="200">
    <script>
        window.addEventListener('storage', (event) => {
            console.log(event)
            document.querySelector('input').value = event.newValue
        })
    </script>
</body>
</html>

然后,当我们在第一个页面的输入框中输入某个值,例如:今天我真帅
在这里插入图片描述
然后再去看第二个页面
在这里插入图片描述
至此,跨标签页通信大功告成

相关推荐

  1. 对象存储的详细介绍

    2024-06-11 04:10:03       34 阅读
  2. 本地存储、自定义事件、全局事件总线

    2024-06-11 04:10:03       35 阅读
  3. Kubernetes基础(二十)-k8s存储对象Storage Classes

    2024-06-11 04:10:03       55 阅读
  4. cookie、Web Storage

    2024-06-11 04:10:03       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-11 04:10:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-11 04:10:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-11 04:10:03       82 阅读
  4. Python语言-面向对象

    2024-06-11 04:10:03       91 阅读

热门阅读

  1. Python爬虫实现“自动重试”机制的方法(1)

    2024-06-11 04:10:03       28 阅读
  2. OpenAI 发布的 GPT-4o是什么,有什么功能?

    2024-06-11 04:10:03       49 阅读
  3. 算法训练营day52

    2024-06-11 04:10:03       29 阅读
  4. ABSD-系统架构师(七)

    2024-06-11 04:10:03       31 阅读
  5. document.queryselector怎么用

    2024-06-11 04:10:03       42 阅读