-
基本概念
-
window.addEventListener('storage', callback)是JavaScript中用于在浏览器环境下监听storage事件的方法。window对象代表浏览器窗口,addEventListener用于添加事件监听器,'storage'是事件类型,callback是当storage事件被触发时要执行的函数。
-
-
storage事件-
触发场景:当同一个域名下的其他窗口(例如,另一个标签页或者一个
iframe)修改了localStorage或者sessionStorage时,当前窗口会触发storage事件。这使得一个窗口能够感知到其他窗口对存储数据的修改,从而做出相应的响应。 -
事件对象属性:当
storage事件被触发时,传递给callback函数的事件对象(通常用event表示)包含一些重要的属性,例如:-
key:被修改的存储项的键(key)名称。 -
oldValue:存储项修改前的值。 -
newValue:存储项修改后的的值。 -
storageArea:指向被修改的存储对象,是localStorage还是sessionStorage。 -
url:触发这个存储变化的文档的URL。
-
-
-
示例
-
简单示例:监听
localStorage修改并打印信息-
window.addEventListener('storage', function(event) { console.log('存储发生变化'); console.log('被修改的键:', event.key); console.log('旧值:', event.oldValue); console.log('新值:', event.newValue); console.log('存储区域:', event.storageArea === localStorage); console.log('触发变化的URL:', event.url); }); - 在这个示例中,当
localStorage(或sessionStorage)在同一域名的其他窗口被修改时,会在控制台打印出关于存储变化的详细信息,包括被修改的键、旧值、新值、存储区域以及触发变化的URL。
-
-
应用场景示例:同步多个窗口的数据显示
- 假设你有一个网页应用,在多个标签页中打开,并且这些标签页都显示从
localStorage读取的数据。当一个标签页修改了localStorage中的数据时,其他标签页需要更新显示内容。 -
<!DOCTYPE html> <html> <head> <title>Storage Event Example</title> </head> <body> <div id="data-display"></div> <script> // 从localStorage读取数据并显示 function updateDisplay() { var data = localStorage.getItem('sharedData'); document.getElementById('data-display').innerHTML = data? data : '暂无数据'; } updateDisplay(); window.addEventListener('storage', updateDisplay); </script> </body> </html> - 在这个网页中,
updateDisplay函数用于从localStorage读取数据并显示在div元素中。通过window.addEventListener('storage', updateDisplay),当localStorage在其他窗口被修改时,updateDisplay函数会被调用,从而更新当前窗口的显示内容,实现了多个窗口之间数据显示的同步。
- 假设你有一个网页应用,在多个标签页中打开,并且这些标签页都显示从
-