Dan*_*n M 4 javascript html5 session-storage local-storage
我知道可以通过覆盖Storage.prototype.getItem,setItem,removeItem和clear来覆盖HTML5存储API.但是,这将覆盖本地存储和会话存储的.
是否可以覆盖一个而不是另一个?或者单独覆盖两个?
一点上下文:我有一个现有的应用程序,它大量使用本地存储和会话存储.我想添加一些临时代码来镜像另一个存储机制中的本地存储中的东西,但我不想随之拖动会话存储内容.
我可以更新对localStorage的每个引用来调用一些可以执行镜像的包装器函数,但我真的不想更新所有这些调用.如果我可以通过覆盖一组存储方法来本地化这些代码,那将更加清晰.
dre*_*me4 11
有几种可能性来实现你想要的.但请记住,它们都不应该用于生产环境.
第一种选择,如果检测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);
}
}
Run Code Online (Sandbox Code Playgroud)
第二个,替换原型sessionStorage或localStorage对象.它可能看起来像这样:
localStorage.__proto__ = Object.create(Storage.prototype);
localStorage.__proto__.setItem = function() {
// your logic here
}
Run Code Online (Sandbox Code Playgroud)
请注意,我使用的__proto__是非标准的伪属性,但在Chrome和Firefox中公开.(不了解Opera,Safari等).但是,您可以看到它在开发过程中可能会有所帮助.
| 归档时间: |
|
| 查看次数: |
7333 次 |
| 最近记录: |