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

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

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

5 ответов

Решение

Проверьте это http://bytes.com/topic/javascript/insights/913606-javascript-communication-between-browser-windows-tabs все объяснено.

Или посмотрите эту демонстрацию http://theprivateland.com/bncconnector/demo.htm

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

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

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

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

Другие вопросы по тегам