我有两个浏览器窗口 A 和 B 并排打开。
当有人点击窗口中的按钮 A 时,我想在窗口 B 中运行一个功能。
我目前正在窗口 B 中使用hashchange事件,在窗口 A 中使用window.open(myurl,myurl)来告诉其他窗口开始运行功能,但当网址更改时,这不会很好。
javascript中有另一个解决方案来初始化当前窗口之外的事件吗?
答案 0 :(得分:2)
我能想到的一种方法是激发另一个选项卡/窗口将检测到的localStorage更改,只要它们都属于同一个域,从而共享相同的localStorage。 如果在您的事件触发标签中,您执行以下操作:
localStorage.setItem('detectMyChange', '0');
localStorage.setItem('detectMyChange', '1');
然后你可以在另一个标签/窗口上检测到这个变化并对它作出反应(我在这里使用JQuery,与纯Javascript类似):
$(window).on('storage', function (e) {
var storageEvent = e.originalEvent;
if ((storageEvent.key == 'detectMyChange') && (storageEvent.oldValue == '0') && (storageEvent.newValue == '1')) {
// Event detected, do some really useful thing here ;)
}
});
在触发窗口中更改localStorage两次的原因是能够使用相同的代码再次(在同一窗口或其他窗口中)触发事件,因为您检测到localStorage变量从一个已知值更改为另一个已知值。
您甚至可以设置不同的新值,以便将不同的信息发送到其他选项卡/窗口。 希望它有所帮助。