首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否可以在HTML5中分别覆盖本地存储和会话存储?

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

Stack Overflow用户
提问于 2012-11-29 03:13:28
回答 2查看 11.6K关注 0票数 10

我知道可以通过覆盖Storage.prototype.getItem、setItem、removeItem和clear来覆盖HTML5存储API。但这将覆盖本地存储和会话存储的这些方法。

有没有可能只覆盖一个而不覆盖另一个?或者分别覆盖这两个?

一个小背景:我有一个现有的应用程序,它大量使用本地存储和会话存储。我想添加一些临时代码,以将本地存储中的内容镜像到另一种存储机制中,但我不想拖动会话存储内容。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-29 04:22:54

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

第一个选项检测sessionStoragelocalStorage对象是否调用了setItem方法。你可以这样写:

代码语言:javascript
复制
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对象的原型。它可能看起来像这样:

代码语言:javascript
复制
localStorage.__proto__ = Object.create(Storage.prototype);
localStorage.__proto__.setItem = function() {
    // your logic here
}

注意,我使用了非标准的__proto__伪属性,但在Chrome和Firefox中是公开的。(不了解Opera、Safari等)。但是,正如您所看到的,它在开发过程中可能会有所帮助。

票数 15
EN

Stack Overflow用户

发布于 2018-06-30 04:22:35

是,本地存储和会话存储在HTML5中分别覆盖

代码语言:javascript
复制
localStorage.setItem('name', Krishna); //here local storege value is Krishna
sessionStorage.name = "Krishna"; //here Session storege value is Krishna

在下面的代码中,我们将分别覆盖本地存储和会话存储值

代码语言:javascript
复制
localStorage.setItem('name', Sri); //here local storege value is Sri
sessionStorage.name = "Pal"; //here Session storege value is Pal
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13612643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档