脚本之家

电脑版
提示:原网页已由神马搜索转码, 内容由www.jb51.net提供.
您的位置:首页网络编程JavaScriptjavascript技巧→ JavaScript监听localStorage变化

JavaScript实时监听localStorage变化的实现方法小结

  更新时间:2024年06月30日 13:35:49  作者:接着奏乐接着舞。 
很多时候,我们在A页面通过点击之类的操作获得一个数值,然后拿到B页面使用,我们希望这个值是响应式的,当然你可以使用vue或者react的实现,这篇文章适合想偷懒或者很多后端小伙不愿意去用的使用,效果是差不多的主要是适用于任何基于JavaScript的项目,需要的朋友可以参考下

在不同窗口/选项卡中监听 localStorage 变化

当 localStorage 的数据在一个窗口/选项卡中改变时,其他同源的窗口/选项卡会触发 storage 事件。我们可以利用这个事件来监听 localStorage 的变化。

示例代码

// 添加 storage 事件监听器
window.addEventListener('storage', function(event) {
if (event.key === 'groupID') {
console.log('New value:', event.newValue);
}
});

解释

  • storage 事件会在同源的其他窗口/选项卡中触发。
  • event.key 是变化的 localStorage 项的键。
  • event.newValue 是变化后的新值。

注意事项

  • 只有在不同的窗口/选项卡之间修改 localStorage 时,才会触发 storage 事件。
  • 如果在同一个窗口/选项卡中修改 localStorage,则不会触发 storage 事件。

在同一个窗口/选项卡中监听 localStorage 变化

在同一个窗口/选项卡中,storage 事件不会被触发。我们可以通过自定义事件或其他手段来实现对 localStorage 变化的监听。

方法一:使用自定义事件

  • 设置 localStorage 并触发自定义事件
function setLocalStorageItem(key, value) {
localStorage.setItem(key, value);
const event = new CustomEvent('localStorageChange', { detail: { key, value } });
window.dispatchEvent(event);
}
  • 监听自定义事件
window.addEventListener('localStorageChange', function(event) {
if (event.detail.key === 'groupID') {
console.log('New value:', event.detail.value);
}
});

方法二:使用定时器轮询

另一种方法是在一定时间间隔内轮询 localStorage 的值,检查是否发生变化。

let lastValue = localStorage.getItem('groupID');
setInterval(function() {
const newValue = localStorage.getItem('groupID');
if (newValue !== lastValue) {
console.log('New value:', newValue);
lastValue = newValue;
}
}, 1000); // 每秒检查一次

方法三:使用 Proxy 对象

如果希望对所有的 localStorage 操作进行代理,可以使用 Proxy 对象。

const localStorageProxy = new Proxy(localStorage, {
set(target, key, value) {
target.setItem(key, value);
const event = new CustomEvent('localStorageChange', { detail: { key, value } });
window.dispatchEvent(event);
return true;
}
});
// 设置值时使用代理对象
localStorageProxy.groupID = 'newValue';
// 监听自定义事件
window.addEventListener('localStorageChange', function(event) {
if (event.detail.key === 'groupID') {
console.log('New value:', event.detail.value);
}
});

示例:通过 localStorage 监听实现页面间通信

假设我们有两个页面,页面A设置 localStorage 中的 groupID 值,页面B监听 groupID 的变化并根据最新的值执行相应的逻辑。

页面A:设置 localStorage 并触发自定义事件

const sss = (node, data) => {
let id = data.id.split('_')[1];
alert(id);
localStorage.setItem('groupID', id);
// 手动触发自定义事件
const event = new CustomEvent('localStorageChange', { detail: { key: 'groupID', value: id } });
window.dispatchEvent(event);
};

页面B:监听自定义事件并获取最新的 groupID 值

mounted() {
let _this = this;
// 初次加载时获取数据
_this.getData();
// 使用自定义事件监听 groupID 变化
window.addEventListener('localStorageChange', function(event) {
if (event.detail.key === 'groupID') {
alert('1');
_this.getData();
}
});
},
methods: {
async getData() {
const id = localStorage.getItem('groupID');
// 检查 id 是否存在
if (!id) {
this.$message({
message: 'Group ID 不存在,请先选择一个组。',
type: 'warning'
});
return;
}
try {
const res = await traffic.trafficvulndel({
page: this.formData.page_num,
size: this.pageSize,
search: this.formData.search_field,
groupID: id,
...this.formData
});

if (res.code === 200) {
this.tableData = res.data.assetsInfo;
console.log(this.tableData, 'this.tableData');
this.totalpage = res.data.count;
} else {
this.$message({
message: res.msg,
type: 'error'
});
}
} catch (error) {
console.log(error);
this.$message({
message: '请求失败,请稍后再试。',
type: 'error'
});
}
}
}

以上就是JavaScript实时监听localStorage变化的实现方法小结的详细内容,更多关于JavaScript监听localStorage变化的资料请关注脚本之家其它相关文章!

相关文章

    • 这篇文章主要是对javascript放大镜效果的简单实现进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
      2013-12-12
    • 最近在研究Javascript发现了其中一些之前忽略的问题,所以想着总结分享出来,下面这篇文章主要给大家介绍了关于javascript sort()排序你可能忽略的一点理解,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
      2017-07-07
    • 这篇文章主要介绍了javascript自动给文本url地址增加链接的方法,有需要的朋友可以参考一下
      2014-01-01
    • 这篇文章主要给大家介绍了关于微信小程序使用Echarts和分包的完整步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
      2021-03-03
    • 这篇文章主要介绍了ES6学习笔记之Set和Map数据结构,结合实例形式详细分析了ECMAScript中基本数据结构Set和Map的常用属性与方法的功能、用法及相关注意事项,需要的朋友可以参考下
      2017-04-04
    • 本篇文章主要介绍了微信小程序三级联动地址选择器的实例代码,具有一定的参考价值,有兴趣的可以了解一下
      2017-07-07
    • 这篇文章主要介绍了TypeScript与JavaScript的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
      2022-12-12
    • 这篇文章主要为大家详细介绍了微信小程序实现九宫格效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
      2021-07-07
    • 这篇文章主要介绍了js如何计算斐波那契数列第n项的值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
      2023-01-01
    • 这篇文章主要介绍了js动态获取时间的方法,结合实例形式分析了javascript日期时间计算与页面元素动态操作相关实现技巧,需要的朋友可以参考下
      2019-08-08

    最新评论