jQuery:其他选项卡/窗口中的Fire事件

时间:2016-07-01 18:22:50

标签: jquery tabs window hashchange

我有两个浏览器窗口 A B 并排打开。

当有人点击窗口中的按钮 A 时,我想在窗口 B 中运行一个功能。

我目前正在窗口 B 中使用hashchange事件,在窗口 A 中使用window.open(myurl,myurl)来告诉其他窗口开始运行功能,但当网址更改时,这不会很好。

javascript中有另一个解决方案来初始化当前窗口之外的事件吗?

1 个答案:

答案 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变量从一个已知值更改为另一个已知值。

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