2016-07-01 71 views
0

我有两个浏览器窗口AB并排打开。jQuery:其他选项卡/窗口中的火灾事件

当有人点击窗口中的按钮A我想在窗口B中运行一个函数。

我目前使用的hashchange事件窗口和window.open(myurl,myurl)窗口一个告诉其他窗口开始运行的功能,但是这并不十分正常工作以及当网址更改时。

是否有JavaScript的另一个解决方案,以当前窗口以外的init事件?

+1

查看[Window.postMessage()](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage)。 –

回答

1

我能想到的一种方法是激发其他选项卡/窗口将检测到的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的变量的变化从一个已知的值到另一个已知的值。

您甚至可以设置不同的新值,将不同的信息发送到其他选项卡/窗口。 希望它有帮助。

+0

精彩回答!我已经使用本地存储来告诉其他窗口更改了哪些内容。但我并不知道存储事件。谢谢! – typocoder