2011-02-13 49 views
4

如何讓位於同一個域的兩個選項卡(或窗口)能夠相互通話而不必讓另一個窗口實例相互通話。使用JavaScript在窗口/選項卡之間進行通信

編輯:當在另一個問題之前詢問時,爲什麼這被標記爲重複?

+1

+1有趣。我認爲Chrome的新「可安裝應用程序」支持這一點。 – JCOC611 2011-02-13 23:20:20

+0

有關該主題的一些消息: http://stackoverflow.com/questions/19125823/how-is-it-possible-to-share-single-js-resource-between-browser-tabs/19165781#19165781 BNC連接器仍然是一種選擇,一個新選項是使用localStorage的intercom.js,另一個選項是使用共享webworkers。 – inf3rno 2013-10-03 23:05:14

回答

0

我能想到的唯一方法就是使用XHR。每個窗口/選項卡都與服務器進行通信,而服務器又與其他窗口進行通信,這幾乎與gmail聊天工作方式相同。除了你在同一個客戶端上有2個窗口,而不是2個客戶端上的1個窗口。

1

我找到了一種方法,我可以在每個頁面上使用LocalConnection製作兩個Flash動畫,以使用externalinterface在另一個頁面上調用JavaScript。

把這個在AS3 SWF,這是接收器:

import flash.external.ExternalInterface; 
import flash.net.LocalConnection; 

var mLocalConnection:LocalConnection; 
mLocalConnection = new LocalConnection(); 
mLocalConnection.connect("xivioview"); 
mLocalConnection.client=this; 

function recieveText(textRecieved):void { 
ExternalInterface.call(textRecieved); 
}; 

和發送器SWF:

import flash.external.ExternalInterface; 
import flash.net.LocalConnection; 

function sendtoview(con,val):String { 
//create local connection for sending text 
var sending_lc:LocalConnection; 
sending_lc = new LocalConnection(); 
sending_lc.send("xivioview", "recieveText", val); 
return "kk" 
} 
ExternalInterface.addCallback("sendtoview", sendtoview); 

這是設置爲單向的,並且使用它的JavaScript :

document.getElementById("youembeddedobject").sendtoview("xivioview","alert('Hai!')") 

這將在接收器的選項卡中執行該JavaScript代碼,但它不會執行,直到您回到該標籤(我已經問了一個問題爲什麼,並且沒有任何反應)

+1

有關您如何做到這一點的任何鏈接?是否支持跨瀏覽器? – 2011-03-01 01:34:22

0

我只想有一個JavaScript在頁面加載執行,將連續輪詢(window.setInterval)的sessionStore的一個標記,有人給我發一個消息,然後宣讀了該消息sessionStore,然後做任何需要的。

1

即使在HTML5之前,如果文檔具有相同的來源,也支持在不同的JavaScript執行上下文之間進行通信。如果不是,或者您沒有提及其他Window對象,則可以使用隨HTML5引入的新的postMessage API。我在這stackoverflow answer中詳細闡述了兩種方法。

相關問題