Связь между окнами/вкладками с JavaScript

Как я могу иметь две вкладки (или окна), которые находятся в одном домене, иметь возможность разговаривать друг с другом без необходимости иметь один экземпляр окна другой.

Изменить: почему это было отмечено как дубликат, когда это было задано перед другим вопросом?

Ответ 2

Я нашел способ, я могу сделать два флеш-ролика на каждой странице с помощью LocalConnection для вызова 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 на вкладке получателя, но он не будет выполняться до тех пор, пока вы не вернетесь на эту вкладку (я уже задал вопрос, почему и пока не получил ответа)

Ответ 3

Общение между различным контекстом выполнения JavaScript поддерживалось даже до HTML5, если документы были одного источника. Если нет или у вас нет ссылки на другой объект Window, вы можете использовать новый postMessage API, представленный с HTML5. Я подробно остановился на обоих подходах в этом fooobar.com/questions/44598/....

Ответ 4

Единственный способ, которым я могу думать, - использовать XHR. Каждое окно/вкладка связывается с сервером, который, в свою очередь, обменивается данными с другими окнами, практически так же работает gmail chat. За исключением того, что у вас было бы 2 окна на одном клиенте, а не на одном окне на 2 клиента.

Ответ 5

Я бы просто выполнил javascript на загрузке страницы, который будет непрерывно опроса (window.setInterval) sessionStore для флага, говорящего, что кто-то отправил мне сообщение, затем прочитал это сообщение из sessionStore и затем выполнил все, что требуется.