Вы сказали, что ваша:
утличная цель состоит в том, чтобы сделать что-то вроде facebook, где, если вы откроете 4 вкладки facebook, и чат в одной вкладке, чат актуализируется на каждой вкладке facebook, которая аккуратно!
Это должно произойти как побочный продукт вашего дизайна, взгляды, запрашивая модель (возможно, сервер) для обновления чата, а не ваш дизайн в кросс-просмотра связи. Если вы не имеете дело с передачей огромных объемов данных, зачем беспокоиться об этом? Похоже, что это все усложнит без огромного выигрыша.
Много лет назад я обнаружил, что если я сделал window.open
, используя имя существующего окна и пустой URL, то получил ссылку на существующее окно (такое поведение даже документировано на MDC, а комментарий на MSDN docs говорит о том, что оно работает и на IE). Но это было много лет назад, я не знаю, насколько универсальна его поддержка в современном мире, и, конечно, вам не придется искать имя окна, если только все ваши окна не будут содержать имя iframe
для связи, названное уникальным образом через серверный код, а затем переданное другим окнам с помощью серверного кода... (Страшная мысль: Это может быть реально осуществимо. Храните "текущие" имена окон, связанные с учетной записью, в таблице, передавайте список любому новому окну, созданному для входа в эту учетную запись, отбирайте старые неактивные записи. Но если список слегка устарел, вы откроете новые окна при поиске других.... И я держу пари, что поддержка сомнительна от браузера к браузеру.)
AFAIK, невозможно общаться через окна, если у них нет одного и того же родителя.
Если оба окна открыты из родительского окна, вы должны иметь возможность получить ссылки на родительские переменные.
В родительском окне открывайте окна следующим образом:
childA = window.open(...);
childB = window.open(...)
в дочернем окне, обращайтесь к дочернему окнуB следующим образом:
childB = window.opener.childA
У меня есть отличный способ сделать такой трюк, но с ограничениями: вы должны разрешить всплывающие окна для своего домена, и вы всегда будете открывать одну страницу (как вкладка или как всплывающее окно), который будет реализовывать связь между окнами.
Вот пример: http://test.gwpanel.org/test/page_one.html (обновить страницу после включения всплывающих окон для домена)
Основная особенность этого трюка - всплывающее окно открывается с фрагментом URL-адреса '#' в конце, это заставляет браузер не менять расположение окна и сохранять все данные. А window.postMessage сделает все остальное.
SharedWorker - это спецификация WHATWG / HTML5 для общего процесса, который может обмениваться данными между вкладками.