【问题标题】:Clear local storage without reloading page清除本地存储而不重新加载页面
【发布时间】:2018-02-22 16:01:46
【问题描述】:

我正在尝试创建一个功能来重置某种游戏的分数,但我遇到了问题。

这是我的功能:

function resetScore() {
console.log("q " + q + " score " + score);
localStorage.setItem("q", 1);
localStorage.setItem("score", 0);
console.log("q " + q + " score " + score);
window.localStorage.clear();
console.log("q " + q + " score " + score);
setTimeout(function () {
    window.location.href = "quiz.xhtml";
}, 300);

如您所见,我正在尝试不同的方法: 第一个是将本地存储设置为默认值。 第二种是简单地清除localStorage。

这是 console.log 的输出:

quiz.js:27 q 2 得分 1

quiz.js:30 q 2 得分 1

quiz.js:32 q 2 得分 1

如果我重新加载页面,console.log 是:

quiz.js:27 q 1 得分 0

quiz.js:30 q 1 得分 0

quiz.js:32 q 1 得分 0

清除后最后一个console.log不为空可能是因为我有一个函数可以将本地存储设置为默认值,如果它是== null。

如您所见,清除后我将location.href更改为测验页面(我的重置功能在我的主页中)。当我在 Chrome 上尝试时,我的 localStorage 在测验页面加载时设置为默认值。但是我正在为 ePub 执行此操作,当我在 iBooks 上尝试此操作时,当我到达测验页面时,它仍然具有本地存储的旧值。我需要回到主页,然后再到测验页面才能最终获得清除的 localStorage。

有什么办法解决这个问题吗?

编辑:

这是带有更新变量的函数:

function resetScore() {
console.log("q " + q + " score " + score);
localStorage.setItem("q", 1);
q = parseInt(localStorage.getItem("q"), 10);
localStorage.setItem("score", 0);
score = parseInt(localStorage.getItem("score"), 10);
console.log("q " + q + " score " + score);
setTimeout(function () {
    window.location.href = "quiz.xhtml";
}, 300);

}

【问题讨论】:

  • 您的代码工作正常.. 您正在记录 qscore,仅仅因为您清除了 loclastorage 并不意味着您要删除用于设置 localstorage 的变量。根本没有理由重新加载页面..在清除本地存储后执行此操作..console.log("q " + localStorage.getItem('q') + " score " + localStorage.getItem('score'));
  • 感谢您的回答。那是一个愚蠢的错误。现在我用新的 localStorage 值设置变量,但行为没有改变。在 iBooks 中,测验仍以旧值开始。
  • 你能发布你更新的函数吗(不删除原来的,把它发布在下面作为编辑)..
  • 我已经用更新的函数进行了编辑。

标签: javascript local-storage epub


【解决方案1】:

经过多次测试,我真的认为问题出在 iBooks 上。好像localStorage没有在页面之间共享。

我也尝试通过 URL 参数传递数据,但 iBooks 似乎删除了文件扩展名之后的所有内容。

我将在测验页面中使用我的重置功能,一切都会正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    相关资源
    最近更新 更多