JavaScript; коммуникация между вкладками/окнами с тем же источником [дубликат]

69
задан brillout 19 June 2016 в 20:31
поделиться

4 ответа

Вы сказали, что ваша:

утличная цель состоит в том, чтобы сделать что-то вроде facebook, где, если вы откроете 4 вкладки facebook, и чат в одной вкладке, чат актуализируется на каждой вкладке facebook, которая аккуратно!

Это должно произойти как побочный продукт вашего дизайна, взгляды, запрашивая модель (возможно, сервер) для обновления чата, а не ваш дизайн в кросс-просмотра связи. Если вы не имеете дело с передачей огромных объемов данных, зачем беспокоиться об этом? Похоже, что это все усложнит без огромного выигрыша.

Много лет назад я обнаружил, что если я сделал window.open, используя имя существующего окна и пустой URL, то получил ссылку на существующее окно (такое поведение даже документировано на MDC, а комментарий на MSDN docs говорит о том, что оно работает и на IE). Но это было много лет назад, я не знаю, насколько универсальна его поддержка в современном мире, и, конечно, вам не придется искать имя окна, если только все ваши окна не будут содержать имя iframe для связи, названное уникальным образом через серверный код, а затем переданное другим окнам с помощью серверного кода... (Страшная мысль: Это может быть реально осуществимо. Храните "текущие" имена окон, связанные с учетной записью, в таблице, передавайте список любому новому окну, созданному для входа в эту учетную запись, отбирайте старые неактивные записи. Но если список слегка устарел, вы откроете новые окна при поиске других.... И я держу пари, что поддержка сомнительна от браузера к браузеру.)

4
ответ дан 24 November 2019 в 13:45
поделиться

AFAIK, невозможно общаться через окна, если у них нет одного и того же родителя.

Если оба окна открыты из родительского окна, вы должны иметь возможность получить ссылки на родительские переменные.

В родительском окне открывайте окна следующим образом:

childA = window.open(...);
childB = window.open(...)

в дочернем окне, обращайтесь к дочернему окнуB следующим образом:

childB = window.opener.childA
1
ответ дан 24 November 2019 в 13:45
поделиться

У меня есть отличный способ сделать такой трюк, но с ограничениями: вы должны разрешить всплывающие окна для своего домена, и вы всегда будете открывать одну страницу (как вкладка или как всплывающее окно), который будет реализовывать связь между окнами.

Вот пример: http://test.gwpanel.org/test/page_one.html (обновить страницу после включения всплывающих окон для домена)

Основная особенность этого трюка - всплывающее окно открывается с фрагментом URL-адреса '#' в конце, это заставляет браузер не менять расположение окна и сохранять все данные. А window.postMessage сделает все остальное.

0
ответ дан 24 November 2019 в 13:45
поделиться

SharedWorker - это спецификация WHATWG / HTML5 для общего процесса, который может обмениваться данными между вкладками.

12
ответ дан 24 November 2019 в 13:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: