我有两个浏览器窗口A和B并排打开。jQuery:其他选项卡/窗口中的火灾事件
当有人点击窗口中的按钮A我想在窗口B中运行一个函数。
我目前使用的hashchange事件窗口乙和window.open(myurl,myurl)窗口一个告诉其他窗口开始运行的功能,但是这并不十分正常工作以及当网址更改时。
是否有JavaScript的另一个解决方案,以当前窗口以外的init事件?
我有两个浏览器窗口A和B并排打开。jQuery:其他选项卡/窗口中的火灾事件
当有人点击窗口中的按钮A我想在窗口B中运行一个函数。
我目前使用的hashchange事件窗口乙和window.open(myurl,myurl)窗口一个告诉其他窗口开始运行的功能,但是这并不十分正常工作以及当网址更改时。
是否有JavaScript的另一个解决方案,以当前窗口以外的init事件?
我能想到的一种方法是激发其他选项卡/窗口将检测到的localStorage更改,只要它们属于同一个域,从而共享相同的localStorage。 如果在你的事件触发的标签,你做这样的事情:
localStorage.setItem('detectMyChange', '0');
localStorage.setItem('detectMyChange', '1');
然后你就可以检测到其他标签/窗口上的变化和反应,因此(这里使用JQuery I'm,是用纯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的变量的变化从一个已知的值到另一个已知的值。
您甚至可以设置不同的新值,将不同的信息发送到其他选项卡/窗口。 希望它有帮助。
精彩回答!我已经使用本地存储来告诉其他窗口更改了哪些内容。但我并不知道存储事件。谢谢! – typocoder
查看[Window.postMessage()](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage)。 –