用来监听通过代码内修改本地存储或会话存储的内容,window的storage事件触发只能在控制台里清除和修改值触发,在代码里通过set或remove是不会触发的,所以这里希望在代码内修改值也能够被监听到,直接上代码:
//保留原来的方法
let originalSetItem = localStorage.setItem
//重写localstorage.setItem方法
localStorage.setItem = function (key, value) {
//创建event
const event: any = document.createEvent("Event")
// const event: any = new Event("storageChange")
event.initEvent("storageChange")
event.key = key
event.value = value
//派发event事件
document.dispatchEvent(event)
//调用原来的setItem来设置值
originalSetItem.apply(this, arguments)
}
document.addEventListener("storageChange", function (e: any) {
console.log(`localstorage改变了:${e.key}----${e.value}`);
})
localStorage.setItem("测试", "123456")
自定义storageChange事件来监听代码块里修改localstorage内容(sessionStorage同理)
遇到的问题:
通过new Event一个事件的时候,document没有把这个新的事件当成一个事件
会报错
Uncaught TypeError: Failed to execute 'dispatchEvent' on 'EventTarget': parameter 1 is not of type 'Event'
解决的办法:
自定义事件到激发这个事件需要document.createEvent(),event.initEvent(),event.dispatchEvent()这三步,通过createEvent创建新的event可以解决这个问题。
效果图: