打开一个新的选项卡会丢失本地存储中的arraylist javascript堆栈溢出

opening a new tab loses the arraylist in local storage javascript stack overflow

本文关键字:存储 栈溢出 堆栈 javascript arraylist 一个 选项      更新时间:2023-09-26

我的应用程序工作尝试将一些数据存储在本地存储中,当我不打开任何新选项卡或窗口时,本地存储可以正常工作,但当我打开新选项卡时,我的数组会丢失所有以前存储的数据,只存储当前数据。请说明我在这里做错了什么。

我的代码是这样的:

getCurrReqIdList = [];

localStorage.setItem('getCurrReqIdList', JSON.stringify(getCurrReqIdList));
var retrievedData = localStorage.getItem('getCurrReqIdList');
var getFinalReqIdList = JSON.parse(retrievedData);
if(getFinalReqIdList.length > maxCurrentConnectionLength) {
  console.log('Hello');
  getFinalReqIdList.shift();
  getCurrReqIdList.shift();
  localStorage.setItem('getCurrReqIdList',JSON.stringify(getFinalReqIdList));           
}

这篇文章有点令人困惑,但我敢打赌你有

getCurrReqIdList = [];
localStorage.setItem('getCurrReqIdList', JSON.stringify(getCurrReqIdList));

每次加载页面时运行,用于初始化存储。因此,当您打开一个新选项卡时,它会加载页面并用一个空数组覆盖本地存储值。

你的页面应该运行这样的东西:

getCurrReqIdList = localStorage.getItem('getCurrReqIdList');
if(getCurrReqIdList) {
     getCurrReqIdList = JSON.parse(getCurrReqIdList);
} else {
    getCurrReqIdList = [];
    localStorage.setItem('getCurrReqIdList', JSON.stringify(getCurrReqIdList));
}

这不应该发生,因为存储在localStorage对象中的数据也将在选项卡之间共享。

您可能有一些其他代码,一旦打开新选项卡,就会重置或删除本地存储中的数据。

根据:

您不能使用sessionStorage在多个选项卡之间共享数据,因为新页面就是新会话。

您需要更换

setStorageType('sessionStorage')

通过

setStorageType('localStorage') // which is default