基于localStorage实现客户端跨页面数据同步

问题背景

浏览器端, 同域情况下, 实现多个页面\窗口\iframe间的数据同步及通知

应用举例: 在其中一个页面退出登录后, 剩余所有页面自动跳转登录页.

核心原理

localStorage存储是基于单个域的, 统一域内的数据可以实现相互共享; 在其中一个页面更新数据后, 另外一个页面可以读取到该数据, 进而实现数据同步;

window对象的Storage Event消息, 可以实现在localStorage的某个值变化的时候, 以事件+回调的形式实现变化监听, 进而在别的页面更新数据后本页面能够及时感知

举例

<div id="test">测试</div>
let div = document.getElementById('test');
  div.addEventListener('click', function(){
    localStorage.setItem('test', Date.now());
  });

  //监听消息
  window.addEventListener('storage', function(e){
    console.log(e);
    console.log(localStorage.getItem('test'));
  });

事件样例

StorageEvent举例: {
  isTrusted : true,
	bubbles : false,
	cancelBubble : false,
	cancelable : false,
	composed : false,
	currentTarget : Window {window: Window, self: Window, document: document, name: '', location: Location, …},
	defaultPrevented : false,
	eventPhase : 0,
	key : "test",
	newValue : "1703042004763",
	oldValue : "1703042004305",
	returnValue : true,
	srcElement : Window {window: Window, self: Window, document: document, name: '', location: Location, …},
	storageArea : Storage {file_download: '3', js_book_type: '1', …},
	target : Window {window: Window, self: Window, document: document, name: '', location: Location, …},
	timeStamp : 38469.79999999888,
	type : "storage",
	url : "http://127.0.0.1:8080/localStorage.html",
    }

方案局限性

二进制数据, 需要序列化成string存储

不适合大量数据的同步

优点

足够简单, 易封装

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值