簡體   English   中英

是否可以在HTML5中單獨覆蓋本地存儲和會話存儲?

[英]Is it possible to override Local Storage and Session Storage separately in HTML5?

我知道可以通過覆蓋Storage.prototype.getItem,setItem,removeItem和clear來覆蓋HTML5存儲API。 但是,這將覆蓋本地存儲會話存儲的那些方法。

是否可以覆蓋一個而不是另一個? 或者單獨覆蓋兩個?

一點上下文:我有一個現有的應用程序,它大量使用本地存儲和會話存儲。 我想添加一些臨時代碼來鏡像另一個存儲機制中的本地存儲中的東西,但我不想隨之拖動會話存儲內容。

我可以更新對localStorage的每個引用來調用一些可以執行鏡像的包裝器函數,但我真的不想更新所有這些調用。 如果我可以通過覆蓋一組存儲方法來本地化這些代碼,那將更加清晰。

有幾種可能性來實現你想要的。 但請記住,它們都不應該用於生產環境。

第一個選項檢測sessionStoragelocalStorage對象是否調用了setItem方法。 你可以這樣寫:

var _setItem = Storage.prototype.setItem;

Storage.prototype.setItem = function(key, value) { 
    if (this === window.localStorage) {
         // do what you want if setItem is called on localStorage
    } else {
         // fallback to default action
         _setItem.apply(this, arguments);
    }
}

第二個,替換sessionStoragelocalStorage對象的原型。 它可能看起來像這樣:

localStorage.__proto__ = Object.create(Storage.prototype);
localStorage.__proto__.setItem = function() {
    // your logic here
}

請注意,我使用了__proto__偽屬性,這是非標准屬性,但在Chrome和Firefox中公開。 (不了解Opera,Safari等)。 但是,您可以看到它在開發過程中可能會有所幫助。

是的,本地存儲和會話存儲在HTML5中單獨覆蓋

localStorage.setItem('name', Krishna); //here local storege value is Krishna
sessionStorage.name = "Krishna"; //here Session storege value is Krishna

在下面我們分別覆蓋本地存儲和會話存儲值

localStorage.setItem('name', Sri); //here local storege value is Sri
sessionStorage.name = "Pal"; //here Session storege value is Pal

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM