繁体   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