2012-08-24 35 views
6

我有一個html頁面(main.html)在window.open(「newtab.html」)方法中使用javascript在同一個域中打開一個新選項卡。瀏覽器選項卡之間的通信

在新選項卡中,用戶做了一些結束他點擊按鈕的活動。 在這一點上,我想發送一個消息到開瓶器窗口。 我嘗試postMessage,但從新標籤我不能有一個參考開罐器。

從新選項卡,我想是這樣,但我有「KO」

var w = window.opener; 
if (w) { 
    w.postMessage("hi", "http://10.150.10.43"); 
} else { 
    alert("ko"); 
} 

什麼是從二級標籤/窗口發送消息給主要的一個(在同一個域中的最佳方式)?

非常感謝你 盧卡

+0

可能重複[我可以控制一個HTML5應用兩個瀏覽器窗口?](http://stackoverflow.com/questions/5277482/can-i-control-two-browser-windows-with-one -html5-app) – josh3736

+1

嘿盧卡,別忘了標記答案!伊萬值得重點。 :-) –

+0

是的,你是對的:) –

回答

12

這很奇怪。用window.open("newtab.html")打開一個新窗口應該給新打開的窗口提供通過window.opener參考開啓者的能力。

無論如何,還有其他幾個選項用於在同一個域上的兩個窗口之間進行通信。我認爲,以下兩個是最容易實現的:

  1. 使用localStorage的。如果您將某些數據下的某些數據存儲到新選項卡窗口的localStorage中,那麼開啓器窗口將獲得一個存儲事件。如果您通過處理程序捕獲事件,則可以從您從新選項卡窗口寫入的localStorage中讀取數據。請注意,只有當兩個頁面位於同一個域上,並且實際上存在兩個窗口(在寫入數據的同一窗口中未觸發事件)時,纔會觸發事件。有關如何操作的詳細信息,請參閱:例如:http://diveintohtml5.info/storage.html

  2. 使用共享Web工作人員。一個web worker是一個JS腳本,在後臺執行一個單獨的線程。共享網絡工作者是一種特殊類型的網絡工作者,允許任何數量的父文檔與單個工作者進行通信。因此,您可以使用工作人員在開啓器窗口和新選項卡窗口之間中繼消息。用於與工作人員通信的API與postMessage API非常相似。有關如何操作的更多信息,請參閱:例如:http://www.sitepoint.com/javascript-shared-web-workers-html5/

相關問題