js 如何监听localstorage事件

ppylox
·5/12/2022·2 阅读
AI 摘要模型根据正文自动生成,仅供参考

针对默认 storage 事件无法监听 localStorage 变化的问题,文章提出重写 localStorage.setItem 的方案。核心做法是保存原始 setItem,在重写方法中创建自定义 Event,附加 newValue 和 key 信息后通过 window.dispatchEvent 派发,再调用原始 setItem。同时用 window.addEventListener 监听该自定义事件,在回调中判断 key 是否匹配目标字段并执行回调。代码分 index.vue 与 index.js 两部分,通过 obj.render 注册回调,实现 localStorage 变化即触发定义方法。

最近在做项目的时候需要监听localstorage的变化,使用默认的storage事件发现无效,从网上找到一种解决办法,这个方案重写了Localstorage事件,只要发生变化就会触发定义的方法,刚好能满足需求,代码如下供参考。

index.vue


created() {\n\n// window.addEventListener("storage",aaa)\n\nobj.render(function(d){\n\ndebugger\n\n});\n\n},


index.js


let obj = {\n  _cb: null,\n  render(cb) {\n    this._cb = cb\n    this.addEvent(cb)\n    // localStorage.setItem("PageEngineFormInputData", 123)\n  },\n  addEvent(cb) {\n    var orignalSetItem = localStorage.setItem;\n\n    localStorage.setItem = function (key, newValue) {\n      var setItemEvent = new Event(cb);\n\n      setItemEvent.newValue = newValue;\n      setItemEvent.newValuekey = key;\n\n      window.dispatchEvent(setItemEvent);\n\n      orignalSetItem.apply(this, arguments);\n    };\n\n    window.addEventListener(cb, function (e) {\n      // debugger\n      console.log("newValue:", e.newValue);\n      console.log("key:", e.newValuekey);\n      if (cb && e.newValuekey === 'PageEngineFormInputData') {\n        cb(e.newValue)\n      }\n    });\n  }\n}\nexport default obj

相关文章