ä½¿ç¨ Web Storage API
Web Storage API æä¾äºå卿ºå¶ï¼éè¿è¯¥æºå¶ï¼æµè§å¨å¯ä»¥å®å ¨å°åå¨é®å¼å¯¹ï¼æ¯ä½¿ç¨ cookie æ´å ç´è§ãè¿ç¯æç« 䏿¥ä¸æ¥è®²è§£å¦ä½ä½¿ç¨è¿é¡¹ç®åçææ¯ã
åºæ¬æ¦å¿µ
åå¨å¯¹è±¡æ¯ç®åçé®å¼åå¨ï¼ç±»ä¼¼äºå¯¹è±¡ï¼ä½æ¯å®ä»¬å¨é¡µé¢å è½½æ¶ä¿æå®æ´ãé®åå¼å§ç»æ¯å符串ï¼è¯·æ³¨æï¼ä¸å¯¹è±¡ä¸æ ·ï¼æ´æ°é®å°èªå¨è½¬æ¢ä¸ºå符串ï¼ãä½ å¯ä»¥å访é®å¯¹è±¡ä¸æ ·è®¿é®è¿äºå¼ï¼æè
ä½¿ç¨ Storage.getItem() å Storage.setItem() æ¹æ³ãè¿ä¸è¡é½è®¾ç½®äºï¼ç¸åçï¼colorSetting æ¡ç®ï¼
localStorage.colorSetting = "#a4509b";
localStorage["colorSetting"] = "#a4509b";
localStorage.setItem("colorSetting", "#a4509b");
Web Storage å å«å¦ä¸ä¸¤ç§æºå¶ï¼
sessionStorage为æ¯ä¸ä¸ªç»å®çæºï¼given originï¼ç»´æä¸ä¸ªç¬ç«çåå¨åºåï¼è¯¥åå¨åºåå¨é¡µé¢ä¼è¯æé´å¯ç¨ï¼å³åªè¦æµè§å¨å¤äºæå¼ç¶æï¼å æ¬é¡µé¢éæ°å è½½åæ¢å¤ï¼ãlocalStorageåæ ·çåè½ï¼ä½æ¯å¨æµè§å¨å ³éï¼ç¶åéæ°æå¼åæ°æ®ä»ç¶åå¨ã
è¿ä¸¤ç§æºå¶æ¯éè¿ Window.sessionStorage å Window.localStorage 屿§ä½¿ç¨ï¼æ´ç¡®åç说ï¼å¨æ¯æçæµè§å¨ä¸ Window 对象å®ç°äº WindowLocalStorage å WindowSessionStorage 对象并æå¨å
¶ localStorage å sessionStorage 屿§ä¸ï¼ââè°ç¨å
¶ä¸ä»»ä¸å¯¹è±¡ä¼å建 Storage 对象ï¼éè¿ Storage 对象ï¼å¯ä»¥è®¾ç½®ãè·ååç§»é¤æ°æ®é¡¹ãå¯¹äºæ¯ä¸ªæºï¼originï¼sessionStorage å localStorage 使ç¨ä¸åç Storage 对象ââç¬ç«è¿è¡åæ§å¶ã
ä¾å¦ï¼å¨ææ¡£ä¸è°ç¨ localStorage å°ä¼è¿åä¸ä¸ª Storage 对象ï¼è°ç¨ sessionStorage è¿åä¸ä¸ªä¸åç Storage 对象ãå¯ä»¥ä½¿ç¨ç¸åçæ¹å¼æä½è¿äºå¯¹è±¡ï¼ä½æ¯æä½æ¯ç¬ç«çã
localStorage åè½æ£æµ
为äºè½å¤ä½¿ç¨ localStorageï¼æä»¬åºè¯¥é¦å éªè¯å®æ¯å¦å¨å½åæµè§ä¼è¯ä¸åæ¯æå¹¶å¯ç¨ã
æµè¯å¯ç¨æ§
æ¯æ localStorage çæµè§å¨å°å¨çªå£å¯¹è±¡ä¸å ·æä¸ä¸ªå为 localStorage ç屿§ã使¯ï¼ä» æè¨è¯¥å±æ§åå¨å¯è½ä¼å¼åå¼å¸¸ã妿 localStorage ç¡®å®åå¨ï¼åä»ç¶ä¸è½ä¿è¯ localStorage å®é å¯ç¨ï¼å 为åç§æµè§å¨é½æä¾äºç¦ç¨ localStorage ç设置ãå æ¤ï¼æµè§å¨å¯è½æ¯æ localStorageï¼ä½ä¸éç¨äºé¡µé¢ä¸çèæ¬ã
ä¾å¦ï¼ç§ææµè§æ¨¡å¼ä¸ç Safari æµè§å¨ä¸ºæä»¬æä¾äºä¸ä¸ªç©ºç localStorage 对象ï¼å ¶é é¢ä¸ºé¶ï¼å®é ä¸ä½¿å®æ æ³ä½¿ç¨ãç¸åï¼æä»¬å¯è½ä¼æ¶å°åæ³ç QuotaExceededErrorï¼è¿æå³çæä»¬å·²ç»ç¨å®äºææå¯ç¨çåå¨ç©ºé´ï¼ä½å®é ä¸åå¨ç©ºé´å¯ç¨ãæä»¬çåè½æ£æµåºèèè¿äºæ åµã
è¿æ¯ä¸ä¸ªæ£æµ localStorage æ¯å¦åæ¶åæ¯æåå¯ç¨ç彿°ï¼
function storageAvailable(type) {
var storage;
try {
storage = window[type];
var x = "__storage_test__";
storage.setItem(x, x);
storage.removeItem(x);
return true;
} catch (e) {
return (
e instanceof DOMException &&
// everything except Firefox
(e.code === 22 ||
// Firefox
e.code === 1014 ||
// test name field too, because code might not be present
// everything except Firefox
e.name === "QuotaExceededError" ||
// Firefox
e.name === "NS_ERROR_DOM_QUOTA_REACHED") &&
// acknowledge QuotaExceededError only if there's something already stored
storage &&
storage.length !== 0
);
}
}
è¿æ¯ä½ å°å¦ä½ä½¿ç¨å®ï¼
if (storageAvailable("localStorage")) {
// Yippee! We can use localStorage awesomeness
} else {
// Too bad, no localStorage for us
}
ä½ å¯ä»¥éè¿è°ç¨ storageAvailable('sessionStorage') æ¥æµè¯ sessionStorageã
请åé æ¤å¤ï¼brief history of feature-detecting localStorage.ã
示ä¾
为äºå±ç¤º Web Storage çç¨æ³ï¼æä»¬å建äºä¸ä¸ªç®åç示ä¾ï¼å设称为 Web Storage Demoã示ä¾é¡µé¢æä¾äºæ§å¶è¡¨åï¼ç¨äºèªå®ä¹é¢è²ãåä½åè£ é¥°å¾çï¼
å½ä½ éæ©ä¸åçé项åï¼é¡µé¢ä¼ç«å³æ´æ°ï¼é¤æ¤ä¹å¤ï¼ä½ çéæ©ä¼è¢«åå° localStorage éï¼è¿æ ·ï¼å½ä½ å
³é页é¢ä¹åéæ°å è½½æ¶ï¼ä½ çéæ©ä¼è¢«è®°ä½ã
æä»¬è¿æä¾äºä¸ä¸ªåå¨äºä»¶ç»æé¡µé¢ â å¦æä½ å¨å¦ä¸ä¸ªæ ç¾é¡µå 载该页é¢ï¼ç¶åæ¹åä¹å示ä¾é¡µé¢çé项ï¼åéç StorageEvent äºä»¶ç触åï¼æ´æ°çåå¨ä¿¡æ¯ä¼æ¾ç¤ºåºæ¥ã

夿³¨ï¼é¤äºä½¿ç¨ä¸é¢ç龿¥æ¥ç示ä¾é¡µé¢å¤ï¼è¿å¯ä»¥è·åæºç ã
æµè¯æ¬å°å卿¯å¦å·²è¢«å¡«å
å¨ main.js å¼å¤´ï¼æä»¬å æµè¯æ¬å°å卿¯å¦å·²è¢«å¡«å ï¼å³ï¼é¡µé¢ä¹å被访é®è¿ï¼ï¼
if (!localStorage.getItem("bgcolor")) {
populateStorage();
} else {
setStyles();
}
Storage.getItem() æ¹æ³ç¨æ¥ä»åå¨ä¸è·åä¸ä¸ªæ°æ®é¡¹ã该ä¾ä¸ï¼æä»¬æµè¯ bgcolor æ°æ®é¡¹æ¯å¦åå¨ã妿ä¸åå¨ï¼æ§è¡ populateStorage() æ¥å°åå¨çèªå®ä¹å¼æ·»å å°åå¨ä¸ã妿æå¼åå¨ï¼åæ§è¡ setStyles() æ¥ä½¿ç¨åå¨ç弿´æ°é¡µé¢çæ ·å¼ã
夿³¨ï¼ä½ è¿å¯ä»¥ä½¿ç¨ Storage.length æ¥æµè¯åå¨å¯¹è±¡æ¯å¦ä¸ºç©ºã
ä»åå¨ä¸è·åå¼
æ£å¦ä¸é¢æå°çï¼ä½¿ç¨ Storage.getItem() å¯ä»¥ä»åå¨ä¸è·åä¸ä¸ªæ°æ®é¡¹ãè¯¥æ¹æ³æ¥åæ°æ®é¡¹çé®ä½ä¸ºåæ°ï¼å¹¶è¿åæ°æ®å¼ãä¾å¦ï¼
function setStyles() {
var currentColor = localStorage.getItem("bgcolor");
var currentFont = localStorage.getItem("font");
var currentImage = localStorage.getItem("image");
document.getElementById("bgcolor").value = currentColor;
document.getElementById("font").value = currentFont;
document.getElementById("image").value = currentImage;
htmlElem.style.backgroundColor = "#" + currentColor;
pElem.style.fontFamily = currentFont;
imgElem.setAttribute("src", currentImage);
}
é¦å ï¼åä¸è¡ä»£ç 仿¬å°ä¸è·åå¼ãæ¥çï¼å°å¼æ¾ç¤ºå°è¡¨åå ç´ ä¸ï¼è¿æ ·å¨éæ°å è½½é¡µé¢æ¶ä¸èªå®ä¹è®¾ç½®ä¿æåæ¥ãæåï¼æ´æ°é¡µé¢çæ ·å¼åå¾çï¼è¿æ ·éæ°å 载页é¢åï¼ä½ çèªå®ä¹è®¾ç½®éæ°èµ·ä½ç¨äºã
å¨åå¨ä¸è®¾ç½®å¼
Storage.setItem() æ¹æ³å¯è¢«ç¨æ¥åå»ºæ°æ°æ®é¡¹åæ´æ°å·²åå¨çå¼ãè¯¥æ¹æ³æ¥åä¸¤ä¸ªåæ°ââè¦å建/ä¿®æ¹çæ°æ®é¡¹çé®ï¼å对åºçå¼ã
function populateStorage() {
localStorage.setItem("bgcolor", document.getElementById("bgcolor").value);
localStorage.setItem("font", document.getElementById("font").value);
localStorage.setItem("image", document.getElementById("image").value);
setStyles();
}
populateStorage() æ¹æ³å¨æ¬å°åå¨ä¸è®¾ç½®ä¸é¡¹æ°æ® â èæ¯é¢è²ãåä½åå¾çè·¯å¾ãç¶åæ§è¡ setStyles() æ¹æ³æ¥æ´æ°é¡µé¢çæ ·å¼ã
åæ¶ï¼æä»¬ä¸ºæ¯ä¸ªè¡¨åå
ç´ ç»å®äºä¸ä¸ª onchange çå¬å¨ï¼è¿æ ·ï¼ä¸ä¸ªè¡¨å弿¹åæ¶ï¼åå¨çæ°æ®å页颿 ·å¼ä¼æ´æ°ã
bgcolorForm.onchange = populateStorage;
fontForm.onchange = populateStorage;
imageForm.onchange = populateStorage;
éè¿ StorageEvent ååºåå¨çåå
æ è®ºä½æ¶ï¼Storage 对象åçååæ¶ï¼å³å建/æ´æ°/å 餿°æ®é¡¹æ¶ï¼éå¤è®¾ç½®ç¸åçé®å¼ä¸ä¼è§¦å该äºä»¶ï¼Storage.clear() æ¹æ³è³å¤è§¦å䏿¬¡è¯¥äºä»¶ï¼ï¼StorageEvent äºä»¶ä¼è§¦åãå¨åä¸ä¸ªé¡µé¢å
åççæ¹åä¸ä¼èµ·ä½ç¨ââå¨ç¸åååä¸çå
¶ä»é¡µé¢ï¼å¦ä¸ä¸ªæ°æ ç¾æ iframeï¼åççæ¹åæä¼èµ·ä½ç¨ãå¨å
¶ä»ååä¸ç页é¢ä¸è½è®¿é®ç¸åç Storage 对象ã
å¨äºä»¶ç»æé¡µé¢ä¸ç JavaScript å¦ä¸æç¤ºï¼å¯è§ events.jsï¼ï¼
window.addEventListener("storage", function (e) {
document.querySelector(".my-key").textContent = e.key;
document.querySelector(".my-old").textContent = e.oldValue;
document.querySelector(".my-new").textContent = e.newValue;
document.querySelector(".my-url").textContent = e.url;
document.querySelector(".my-storage").textContent = e.storageArea;
});
è¿éï¼æä»¬ä¸º window 对象添å äºä¸ä¸ªäºä»¶çå¬å¨ï¼å¨å½åååç¸å
³ç Storage 对象åçæ¹åæ¶è¯¥äºä»¶çå¬å¨ä¼è§¦åãæ£å¦ä½ å¨ä¸é¢çå°çï¼æ¤äºä»¶ç¸å
³çäºä»¶å¯¹è±¡æå¤ä¸ªå±æ§å
å«äºæç¨çä¿¡æ¯ââæ¹åçæ°æ®é¡¹çé®ï¼æ¹ååçæ§å¼ï¼æ¹ååçæ°å¼ï¼æ¹åçåå¨å¯¹è±¡æå¨çææ¡£ç URLï¼ä»¥ååå¨å¯¹è±¡æ¬èº«ã
å 餿°æ®è®°å½
Web Storage æä¾äºä¸å¯¹ç®åçæ¹æ³ç¨äºç§»é¤æ°æ®ãæä»¬æ²¡ç¨å¨æä»¬ç demo ä¸ä½¿ç¨è¿äºæ¹æ³ï¼ä½æ¯æ·»å å°ä½ èªå·±ç项ç®ä¸å¾ç®åï¼
Storage.removeItem()æ¥åä¸ä¸ªåæ°ââä½ æ³è¦ç§»é¤çæ°æ®é¡¹çé®ï¼ç¶åä¼å°å¯¹åºçæ°æ®é¡¹ä»åå对åºçåå¨å¯¹è±¡ä¸ç§»é¤ãStorage.clear()䏿¥ååæ°ï¼åªæ¯ç®åå°æ¸ 空åå对åºçæ´ä¸ªåå¨å¯¹è±¡ã
è§è
| Specification |
|---|
| HTML > # dom-localstorage-dev > |
| HTML > # dom-sessionstorage-dev > |
æµè§å¨å ¼å®¹æ§
>api.Window.localStorage
api.Window.sessionStorage
åæµè§å¨æ¯æç localStorage å sessionStorage 容éä¸éä¸åãæµè¯é¡µé¢ detailed rundown of all the storage capacities for various browsersã
夿³¨ï¼ä» ios 5.1 åï¼Safari ç§»å¨å卿¬å°åå¨çæ°æ®å¨ç¼åæä»¶å¤¹ï¼è¿æ ·å¨ç³»ç»ç©ºé´ä¸è¶³çæ åµä¸ï¼æ¹ä¾¿ç³»ç»èªå¨æ¸ çã