Tes*_*sco 17 javascript jquery events sessionstorage
我可以成功绑定事件以更改为localStorage(使用jquery):
$(window).bind('storage', function(e)
{
alert('change');
});
localStorage.setItem('someItem', 'someValue');
Run Code Online (Sandbox Code Playgroud)
如果我使用sessionStorage,事件将不会触发:
$(window).bind('storage', function(e)
{
alert('change');
});
sessionStorage.setItem('someItem', 'someValue');
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
Nic*_*rdu 20
该sessionStorage分离为每个标签,因此它们不能通信.sessionStorage仅在同一选项卡上的帧之间触发事件.
编辑:
我做了以下示例:
http://codepen.io/surdu/pen/QGZGLO?editors=1010
示例页面有两个按钮,用于触发本地存储和会话存储更改.
它还将iframe嵌入到另一个侦听存储事件更改的codepen中:
http://codepen.io/surdu/pen/GNYNrW?editors=1010 (您应该在另一个标签中打开它.)
您会注意到,当您按下"写本地"按钮时,在iframe和打开的选项卡中都会捕获事件,但是当您按"会话写入"时,只有嵌入式iframe会捕获事件.
这个问题似乎得到了很多意见,所以我将把它作为额外信息发布。
如果您想专门响应 sessionStorage 对象上的更新,您可以忽略由 localStorage 引起的事件:
$(window).on('storage',function(e){
if(e.originalEvent.storageArea===sessionStorage){
alert('change');
}
// else, event is caused by an update to localStorage, ignore it
});
Run Code Online (Sandbox Code Playgroud)
我讨厌 jQuery,所以也会发布一个原生版本:
window.addEventListener('storage',function(e){
if(e.storageArea===sessionStorage){
alert('change');
}
// else, event is caused by an update to localStorage, ignore it
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18679 次 |
| 最近记录: |