【发布时间】:2012-11-30 21:24:34
【问题描述】:
我正在为我玩的纸牌游戏开发deck building application。我正在使用 localStorage 来保存和检索卡片组。它似乎在 Chrome 中运行良好,但在 Firefox 中运行不可靠。
在 FF 中,一开始似乎一切正常,套牌甚至在重新加载后仍然存在。但是,如果我添加第二个牌组并重新加载,它只会找到第一个牌组。如果我删除第一个牌组,它就找不到任何东西了。
所有本地存储交互都在 scripts/vault.js 中,我将在下面重现。我做错了吗?
vault = {};
vault.makeKey = function (s) {
return "deck:" + s;
};
vault.friendlyName = function(s) {
if (s.indexOf("deck:") === 0) {
return s.substring(5);
} else {
return s;
}
};
vault.store = function (deck, name) {
if (!window.localStorage) {
alert("This browser doesn't support local storage. You will be unable to save decks.");
return;
}
var key = vault.makeKey(name);
localStorage.setItem(key, deck.export());
};
vault.retrieve = function (key) {
deck.import(localStorage[key]);
};
vault.getDecks = function () {
var keys = Object.keys(localStorage),
out = [],
i,
k,
name = "";
for (i = 0; i < keys.length; i++) {
k = keys[i];
name = vault.friendlyName(k);
if (name !== k && localStorage[k]) {
out.push({name: name, key: k});
}
}
out.sort(function (a, b) {
return a.name > b.name ? 1 : -1;
});
return out;
};
vault.deleteDeck = function (key) {
localStorage.removeItem(key);
};
基本上,由于缺少更好的术语,localStorage 中的键似乎有时会被“冻结”; localStorage 在我操作它时会正常运行,但是一旦我刷新页面,它似乎就会恢复到它被冻结的任何状态。
【问题讨论】:
-
你能做一个jsfiddle.net 演示吗?
-
我在第一篇文章中发布了指向应用程序本身的链接。又来了:asmor.com/anr
-
好吧,如果它在小提琴中,我可以使用代码并检查不同的东西。这不是必需的,但它会让我自己和其他一些人更有可能修补它,看看我们是否能弄明白。
-
我只是想把它提炼成可以发布在 JSFiddle 上的东西,但是发生的事情太多了。特别是考虑到我看到的行为取决于做特定的事情然后重新加载页面......我只是认为它不适合这个。无论如何,谢谢,伙计。
标签: javascript firefox local-storage