JavaScript 本地存储在 Chrome 和 Edge 中删除,但在 Firefox 中不删除

JavaScript Local Storage removes in Chrome and Edge but not within Firefox

我当前的问题是,如果用户在 URL 中输入不正确的邮政编码而遇到错误,则本地存储需要删除这些数据。在 Chrome 和 Edge 中,这按预期工作。

首先,我将全局变量 apiFailed 设置为 false。 我有 weatherData,它是一个对象数组,用于存储和访问 API 数据属性, 我有用于 localStorage getItem() 和 setItem() 和 removeItem() 属性的 storedData 以及分配给 storedData 变量并用于显示和检索持久化 localStorage 数据的 savedWeatherData。

首先 运行ning,由于 localStorage 没有数据并且为空,我检查了它,然后将持久数据分配给 savedWeatherData 变量。我还检查以确保 apiFailed 为假。我还刷新页面(通过代码),以确保检索到数据。该代码位于下方:

if (savedWeatherData == null || savedWeatherData == undefined 
|| savedWeatherData === null || savedWeatherData === undefined) {
        if (apiFailed == false) {
          console.log('savedWeatherData is NuLL');
          storedData = JSON.parse(window.localStorage.getItem('data'));
          savedWeatherData = storedData;
          window.location.reload();

          if (navigator.userAgent.indexOf("Firefox") != -1) {
            console.log('You are in Firefox');
          }
        }
      } else {
        if (apiFailed == false) {
          console.log('savedWeatherData is NOT NULL');
          // if (navigator.userAgent.indexOf("Firefox") != -1) {
        }
      }

这在所有浏览器 Chrome、Edge 和 Firefox 中都按预期工作。在第一个页面启动时,没有 localStorage 数据,所以它被分配并且页面刷新。刷新后,localStorage 不再为 null 并已分配给 savedWeatherData。然后在整个应用程序中使用它来检索和显示数据。

但是,如果用户在任何时候输入了错误的邮政编码,比如错误地输入了一个特殊字符,Chrome 和 Edge 运行 下面的代码将按预期显示,而不是显示错误页面,并且未获取任何数据。

  console.log('APIFAILED status ' + apiFailed);
  if (apiFailed == true) {
    storedData = window.localStorage.removeItem("data");
    savedWeatherData = storedData;
  }

我的问题来了,在Firefox中,apiFailed的console.log显示这仍然是错误的。因此不会删除 localStorage。这意味着错误页面不会显示在 Firefox 中,而不是像 Chrome 和 Edge 中那样显示错误消息,因为 localStorage 仍然有数据,该数据显示时就好像用户输入了正确的邮政编码一样,即使虽然他们没有。 localStorage 保存的数据不会在 Firefox 的 localStorage 中被删除。它确实从 Chrome 和 Edge 的 localStorage 中删除了,我在开发者控制台中看到了。

以下是我如何显示错误页面。 (这是通过使用 Phaser 3 Framework 完成的):

if (apiFailed == true) {
    background = this.add.image(this.game.canvas.width / 2, this.game.canvas.height / 2, "sorryBackground");
    var apiFailText = this.add.text(150, this.game.canvas.height / 2 - 100, "Sorry. The weather forecast is currently unavailable",
      { fontFamily: "Open Sans, sans-serif", fontSize: 70, }).setOrigin(0, 0);
    storedData = window.localStorage.removeItem("data");
    savedWeatherData = storedData;
  }

我还应该提到,在获取、检索和设置 API 数据后,apiFailed 在 catch 中设置为 true。

这里:

        .catch(() => {
      console.log(".catch() called. Error within the .fetch()");
      apiFailed = true;
    });

如有任何帮助和反馈,我们将不胜感激。

谢谢。

我解决了这个问题。

我在 Firefox 中注意到这个问题是因为它从我的 API 提取请求中收到一个 400 错误。 Chrome 和 Edge 的情况并非如此。因此,最后我修改了我的提取,以便通过响应我可以查看我是否收到任何错误。如果确实出现任何错误,我所做的只是清除整个 localStorage 并将 apiFailed 设置为 true,这会依次运行代码块以显示错误页面和消息。

这是我的 fetch 中的 if 语句:

   if (!response.ok) {
        apiFailed = true;
        window.localStorage.clear();
   }

这是显示错误页面的 if 语句。为了以防万一,我在这里通过删除 localStorage 中存储的 API 数据来做同样的事情,并将我的 savedWeatherData 变量设置为此。

  if (apiFailed == true) {
    background = this.add.image(this.game.canvas.width / 2, 
    this.game.canvas.height / 2, "sorryBackground");
    var apiFailText = this.add.text(150, this.game.canvas.height / 2 - 100, 
      "Sorry. The weather forecast is currently unavailable.", { fontFamily: 
      "Open Sans, sans-serif", fontSize: 70, }).setOrigin(0, 0);
    storedData = window.localStorage.removeItem('data');
    savedWeatherData = storedData;
  }

经过测试,现在可以在所有主流浏览器中使用:Chrome、Edge 和 Firefox

我解决了这个问题。

我在 Firefox 中注意到这个问题是因为它从我的 API 提取请求中收到一个 400 错误。 Chrome 和 Edge 的情况并非如此。因此,最后我修改了我的提取,以便通过响应我可以查看我是否收到任何错误。如果确实出现任何错误,我所做的只是清除整个 localStorage 并将 apiFailed 设置为 true,这会依次运行代码块以显示错误页面和消息。

这是我的 fetch 中的 if 语句:

 if (!response.ok) {
        apiFailed = true;
        window.localStorage.clear();
   }

这是显示错误页面的 if 语句。为了以防万一,我在这里通过删除 localStorage 中存储的 API 数据来做同样的事情,并将我的 savedWeatherData 变量设置为此。

if (apiFailed == true) {
    background = this.add.image(this.game.canvas.width / 2, 
    this.game.canvas.height / 2, "sorryBackground");
    var apiFailText = this.add.text(150, this.game.canvas.height / 2 - 100, 
      "Sorry. The weather forecast is currently unavailable.", { fontFamily: 
      "Open Sans, sans-serif", fontSize: 70, }).setOrigin(0, 0);
    storedData = window.localStorage.removeItem('data');
    savedWeatherData = storedData;
  }

经过测试,现在可以在所有主流浏览器中使用:Chrome、Edge 和 Firefox