是否可以在HTML 5中分别覆盖本地存储和会话存储?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (160)

我知道可以通过覆盖Storage.Prototype.getItem、setItem、emoveItem和CLEAR来覆盖HTML 5存储API。

有可能只覆盖其中一个而不是另一个吗?还是分开覆盖?

我可以更新对localStorage的每个引用,以调用一些可以执行镜像的包装器函数,但我真的不想更新所有这些调用。如果我可以通过重写一组存储方法来本地化这段代码,那就更干净了。

提问于
用户回答回答于

要实现你想要的,有几种可能性。但请记住,它们都不应该在生产环境中使用。

第一个选项检测setItem方法被sessionStoragelocalStorage对象。你可以这样写:

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
用户回答回答于

是的,在HTML 5中本地存储和会话存储分别覆盖

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

在下面,我们分别覆盖本地存储和会话存储值

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

扫码关注云+社区

领取腾讯云代金券