是否有可能单独改写本地存储和会话存储的HTML5?(Is it possible to overri

2019-07-04 06:03发布

我知道这是可能通过重写Storage.prototype.getItem,setItem,和的removeItem明确覆盖HTML5存储API。 但是,这将覆盖本地存储会话存储的方法。

是否有可能只覆盖一个,而不是其他? 或单独改写两者兼而有之?

一点背景知识:我有一个现有的应用程序,使非常大量使用本地存储和会话存储的。 我想添加一些临时代码,以反映在本地存储的东西,在另一个存储机制,但我不想与它一起拖动会话存储的内容。

我可以更新每个参考localStorage的调用一些包装函数,可以做镜像,但我真的不想更新所有这些调用。 这将是更清洁的方式,如果我可以通过重写一套单一的存储方法本地化此代码。

Answer 1:

有几种方法可以实现你想要什么。 但要记住,他们都不应该在生产环境中使用。

第一个选项检测是否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
}

请注意,我用__proto__伪属性,它是非标准的,但在Chrome和Firefox暴露。 (不知道关于Opera,Safari和其他)。 然而,正如你可以看到它可能是在开发过程中有帮助的。



Answer 2:

是的,本地存储和会话存储的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


文章来源: Is it possible to override Local Storage and Session Storage separately in HTML5?