2016-07-01 70 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