亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

選項卡或窗口之間的通信

選項卡或窗口之間的通信

梵蒂岡之花 2019-06-11 21:08:23
選項卡或窗口之間的通信我在尋找一種在瀏覽器中(在同一域中,而不是在CORS)中如何在多個選項卡或窗口之間進行通信而不留下痕跡的方法。有幾種解決辦法:使用窗口對象后訊息曲奇餅局部存儲第一種可能是最糟糕的解決方案-您需要從當前的窗口打開一個窗口,然后您只能在打開窗口的情況下才能進行通信。如果在任何窗口中重新加載頁面,則很可能會丟失通信。第二種方法,使用PostMessage,可能支持跨源通信,但與第一種方法有相同的問題。您需要維護一個窗口對象。第三種方法是使用cookie將一些數據存儲在瀏覽器中,這樣看起來就像向同一域中的所有窗口發送消息一樣,但問題是,在清理之前,您永遠無法知道所有選項卡是否已經讀取了“消息”。您必須實現某種超時才能定期讀取cookie。此外,您還受到最大Cookie長度的限制,最大Cookie長度為4KB。第四種解決方案,使用localStorage,似乎克服了cookie的局限性,甚至可以監聽-使用事件。如何使用它是在被接受的答案中描述的。編輯2018:公認的答案仍然有效,但是對于現代瀏覽器來說,使用BroadCastChannel還有一個新的解決方案。有關一個簡單的示例,請參見另一個答案,該示例描述了如何使用BroadCastChannel在制表符之間輕松地傳輸消息。
查看完整描述

3 回答

?
繁星淼淼

TA貢獻1775條經驗 獲得超11個贊

有一個現代化的API專門用于這個目的-廣播頻道

它就像:

var bc = new BroadcastChannel('test_channel');bc.postMessage('This is a test message.');
 /* send */bc.onmessage = function (ev) { console.log(ev); } /* receive */

消息不需要僅僅是DOMString,任何類型的對象都可以發送。

也許,除了API的清潔性之外,這也是這個API的主要好處-沒有對象字符串化。

目前支撐僅在Chrome和Firefox中,但您可以找到使用localStorage的多填充。


查看完整回答
反對 回復 2019-06-11
  • 3 回答
  • 0 關注
  • 573 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號