基于localStorage实现客户端跨页面数据同步
2023-12-20 15:05:22
问题背景
浏览器端, 同域情况下, 实现多个页面\窗口\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存储
不适合大量数据的同步
优点
足够简单, 易封装
文章来源:https://blog.csdn.net/violentbomb/article/details/135104594
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!