如何在JS中实现Web存储持久化



我有一个小测验应用程序,这是一个跨平台的移动应用程序,我计划在Android, iOS和WP8上运行。我想要存储一个本地hilicore,它将跟踪用户拥有多少积分,如果他/她比已经存储的hilicore做得更好,则更新当前hilicore。虽然,我希望高分是持久的,我的意思是,每次用户打开应用,我希望最后的高分出现,并将其与新的测验分数进行比较。意思是,我不想在每次关闭应用程序后都删除最高分。我还希望当应用程序第一次运行时,最高分设置为0,所以显然用户第一次完成测验时会得到一个新的最高分。

我有这些代码:

scoredb.js

// Wait for device API libraries to load
document.addEventListener("deviceready", initScoreDB, false);
// Device APIs are available
function initScoreDB() {
    window.localStorage.setItem("score", 0);
    highscore = window.localStorage.getItem("score");
}

main.js

var correct = 0;
var highscore;
// In between I have some code that keeps incrementing
// correct variable for each correct answer.
if (correct > highscore) {
                window.localStorage.setItem("score", correct);
                highscore = correct;
}

一旦应用程序启动,它似乎可以正常工作。我做了三次测试,在模拟器里,它保持了应有的分数。不过,每次我打开应用程序,hilicore都会重置为0。我猜这是因为我在设备准备好时调用initScoreDB,我在那里初始化分数为0并给那个值hilicore。谁能帮我把分数初始化为0,只有当应用程序第一次运行时,所有其他时间保持最新的最高分作为当前最高分,并将其每次与测验完成时取得的分数进行比较。如果有人能帮助我,我会很高兴的。

这样怎么样:

function initHighScore() {
    if (window.localStorage.getItem("score")) {
        highscore = window.localStorage.getItem("score");
    } else {
        highscore = 0;
    }
}

我将方法重命名为initHighScore,因为它不会在本地存储中保存分数(这是留给应用程序的其他部分)。

最新更新