|
在不同窗口/选项卡中监听 localStorage 变化
当的数据在一个窗口/选项卡中改变时,其他同源的窗口/选项卡会触发事件。我们可以利用这个事件来监听的变化。
示例代码
- // 添加 storage 事件监听器
- window.addEventListener('storage', function(event) {
- if (event.key === 'groupID') {
- console.log('New value:', event.newValue);
- }
- });
复制代码 解释
- 事件会在同源的其他窗口/选项卡中触发。
- 是变化的项的键。
- 是变化后的新值。
注意事项
- 只有在不同的窗口/选项卡之间修改时,才会触发事件。
- 如果在同一个窗口/选项卡中修改,则不会触发事件。
在同一个窗口/选项卡中监听 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);
- }
- });
复制代码 方法二:使用定时器轮询
另一种方法是在一定时间间隔内轮询的值,检查是否发生变化。- let lastValue = localStorage.getItem('groupID');
- setInterval(function() {
- const newValue = localStorage.getItem('groupID');
- if (newValue !== lastValue) {
- console.log('New value:', newValue);
- lastValue = newValue;
- }
- }, 1000); // 每秒检查一次
复制代码 方法三:使用 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设置中的值,页面B监听的变化并根据最新的值执行相应的逻辑。
页面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变化的资料请关注脚本之家其它相关文章!
来源:https://www.jb51.net/javascript/323513cxa.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
|