jylauril是在正確的軌道上,我認爲。
我一直在玩延遲,並注意到一些奇怪的行爲。
據我所知,似乎在ALL JavaScript完成執行之前,如果您觸摸localStorage,包括JS在執行setTimeout,localStorage對於該pageview將顯示爲空白。例如:
$(window).load(function() {
console.log("Waiting 10000ms", new Date());
setTimeout(setDeckSelect, 10000);
});
Firebug的控制檯:
Waiting 10000ms Date {Thu Dec 13 2012 10:35:48 GMT-0500 (Eastern Standard Time)}
exec.js (line 191)
getDecks Date {Thu Dec 13 2012 10:35:58 GMT-0500 (Eastern Standard Time)}
vault.js (line 23)
>>> localStorage
0 items in Storage
我想我可能將要發生什麼,但我的理論迄今已證明是錯誤的。不過,我注意到了一件奇怪的事情。無論我如何的漫長等待,如果我嘗試首先查找甲板,它就會失敗和本地存儲將是空的:
>>> vault.getDecks()
[]
>>> localStorage
0 items in Storage
但是,如果我做的那些以相反的順序...
>>> localStorage
8 items in Storage deck:dfs=
"{"identity":"MakingNews","cards":{}}", deck:ngrngfrn= "{"identity":"BuildingaBetterWorld","cards":{}}", deck:sdfgshsh= "{"identity":"MakingNews","cards":{}}", deck:sdfgdgdfg= "{"identity":"MakingNews","cards":{}}", deck:dfgdfgas= "{"identity":"EngineeringtheFuture","cards":{}}", deck:sdfsga= "{"identity":"MakingNews","cards":{}}", deck:gdgd= "{"identity":"MakingNews","cards":{}}", deck:gfsdfgsdfg= "{"identity":"BuildingaBetterWorld","cards":{}}"
>>> vault.getDecks()
[Object { name= "dfgdfgas", key= "deck:dfgdfgas"}, Object { name= "dfs", key= "deck:dfs"}, Object { name= "gdgd", key= "deck:gdgd"}, Object { name= "gfsdfgsdfg", key= "deck:gfsdfgsdfg"}, Object { name= "ngrngfrn", key= "deck:ngrngfrn"}, Object { name= "sdfgdgdfg", key= "deck:sdfgdgdfg"}, Object { name= "sdfgshsh", key= "deck:sdfgshsh"}, Object { name= "sdfsga", key= "deck:sdfsga"}]
如果我在功能登錄本地存儲,它的工作原理,以及:
vault.getDecks = function() {
console.log(localStorage);
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.getDecks = function() {
// console.log(localStorage);
void localStorage;
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;
};
它不起作用。如果我刪除了void關鍵字,並且僅將localStorage作爲一個語句,它也不起作用。
我不知道爲什麼,但console.log(localstorage)似乎確實解決了這個問題,我可以隨時調用localStorage。
真的很奇怪。
編輯:我發現了一個稍微好一點的解決方案。調用localStorage的'length'屬性也起作用。
vault.getDecks = function() {
//Weird hack to make FF load localStorage correctly...
localStorage.length;
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;
};
這是因爲它不記錄任何東西好一點......
你可以做一個http://jsfiddle.net演示? –
我在第一篇文章中發佈了一個應用程序本身的鏈接。這裏又是:http://asmor.com/anr/ – Asmor
好吧,如果它在小提琴中,我可以使用代碼並檢查不同的東西。這不是必要的,但它會讓我更有可能和其他人一起鼓搗它,看看我們是否可以搞清楚。 –