實現多個標簽頁之間的通信,本質上都是通過中介者模式來實現的。因為標簽頁之間沒有辦法直接通信,因此我們可以找一個中介者,讓標簽頁和中介者進行通信,然后讓這個中介者來進行消息的轉發。通信方法如下:使用 websocket 協議,因為 websocket 協議可以實現服務器推送,所以服務器就可以用來當做這個中介者。標簽頁通過向服務器發送數據,然后由服務器向其他標簽頁推送轉發。
使用 ShareWorker 的方式,shareWorker 會在頁面存在的生命周期內創建一個唯一的線程,并且開啟多個頁面也只會使用同一個線程。這個時候共享線程就可以充當中介者的角色。標簽頁間通過共享一個線程,然后通過這個共享的線程來實現數據的交換。
使用 localStorage 的方式,我們可以在一個標簽頁對 localStorage 的變化事件進行監聽,然后當另一個標簽頁修改數據的時候,我們就可以通過這個監聽事件來獲取到數據。這個時候 localStorage 對象就是充當的中介者的角色。
使用 postMessage 方法,如果我們能夠獲得對應標簽頁的引用,就可以使用postMessage 方法,進行通信。