我知道可以通过覆盖Storage.prototype.getItem、setItem、removeItem和clear来覆盖HTML5存储API。但这将覆盖本地存储和会话存储的这些方法。
有没有可能只覆盖一个而不覆盖另一个?或者分别覆盖这两个?
一个小背景:我有一个现有的应用程序,它大量使用本地存储和会话存储。我想添加一些临时代码,以将本地存储中的内容镜像到另一种存储机制中,但我不想拖动会话存储内容。
我可以更新每个对localStorage的引用,以调用一些可以执行镜像的包装器函数,但我真的不想更新所有这些调用。如果我可以通过覆盖一组存储方法来本地化这段代码,那就更干净了。
发布于 2012-11-29 04:22:54
有几种可能性可以实现你想要的。但请记住,它们都不应该在生产环境中使用。
第一个选项检测sessionStorage
或localStorage
对象是否调用了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);
}
}
第二种是替换sessionStorage
或localStorage
对象的原型。它可能看起来像这样:
localStorage.__proto__ = Object.create(Storage.prototype);
localStorage.__proto__.setItem = function() {
// your logic here
}
注意,我使用了非标准的__proto__
伪属性,但在Chrome和Firefox中是公开的。(不了解Opera、Safari等)。但是,正如您所看到的,它在开发过程中可能会有所帮助。
发布于 2018-06-30 04:22:35
是,本地存储和会话存储在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
https://stackoverflow.com/questions/13612643
复制相似问题