使用 Proxy 对象实现 localStorage 变化监听的代码示例如下:
<!DOCTYPE html>
<html>
<head>
<title>LocalStorage Change Event</title>
</head>
<body>
<button onclick="changeLocalStorage()">Change LocalStorage</button>
<script>
// 封装 localStorage 和 Proxy
const localStorageProxy = new Proxy(localStorage, {
set: function(target, key, value) {
// 调用原始 localStorage 的 setItem 方法
target.setItem(key, value);
// 触发自定义事件
const event = new CustomEvent('localStorageChanged', {
detail: {
key: key,
value: value
}
});
window.dispatchEvent(event);
// 返回 true 表示操作成功
return true;
}
});
// 设置初始值
localStorageProxy.myKey = 'Initial Value';
// 监听 localStorage 变化
window.addEventListener('localStorageChanged', function(event) {
console.log(event.detail.key + ' changed to', event.detail.value);
});
// 定义一个函数来改变 localStorage 的值
function changeLocalStorage() {
const newValue = 'Value changed at ' + new Date().toISOString();
localStorageProxy.myKey = newValue;
}
</script>
</body>
</html>
在此示例中,我们使用 Proxy 对象封装了 localStorage,以便在设置 localStorage 时触发自定义事件。然后,我们在同一标签页或窗口中监听这个自定义事件,以便在 localStorage 发生变化时执行相应的操作。
请注意,这种方法可能会导致意外的副作用,并且可能不是 localStorage 设计的最佳用法。在实际项目中,建议使用其他状态管理工具,如 Vue、React 等前端框架的状态管理功能,或者使用 RxJS 等响应式编程库。