我知道这是可能通过重写Storage.prototype.getItem,setItem,和的removeItem明确覆盖HTML5存储API。 但是,这将覆盖本地存储和会话存储的方法。
是否有可能只覆盖一个,而不是其他? 或单独改写两者兼而有之?
一点背景知识:我有一个现有的应用程序,使非常大量使用本地存储和会话存储的。 我想添加一些临时代码,以反映在本地存储的东西,在另一个存储机制,但我不想与它一起拖动会话存储的内容。
我可以更新每个参考localStorage的调用一些包装函数,可以做镜像,但我真的不想更新所有这些调用。 这将是更清洁的方式,如果我可以通过重写一套单一的存储方法本地化此代码。
有几种方法可以实现你想要什么。 但要记住,他们都不应该在生产环境中使用。
第一个选项检测是否setItem
方法是由所谓sessionStorage
或localStorage
对象。 你可以写这样说:
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);
}
}
第二个,取代的原型sessionStorage
或localStorage
对象。 它可能是这样的:
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
文章来源: Is it possible to override Local Storage and Session Storage separately in HTML5?