我有兩個瀏覽器窗口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)。 –