Связь между окнами / вкладками с помощью 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 и затем делает все, что требуется.