Связь между двумя фреймами из одного домена с помощью postMessage

У меня есть два окна iframe из одного домена, которые размещены в документе из другого домена. Проблема в том, что эти iframe не могут взаимодействовать друг с другом через postMessage. Я даже не могу получить доступ к DOM iframe1 из iframe2, даже если они принадлежат одному домену. Есть какое решение ????

Я использовал следующие параметры для ссылки на необходимый iframe.

parent.frame[x]

Я пробовал следующие строки для доступа к DOM iframe

parent.frame[x].contentWindow returns null,

parent.frame[x].document.getElementsByTagName("body") returns null

Обновлять:

Думаю, мой вопрос недостаточно ясен. Нет проблем с postMessage api, реальная проблема заключается в том, что браузер создает настраиваемый набор фреймов вокруг документа iframe, в моем случае!

Таким образом, parent.frame[x] не будет указывать на окно iframe, вместо этого он указывает на настраиваемый набор фреймов внутри окна iframe.

Следующий вопрос хорошо объясняет проблему.

Запретить браузеру загружать настраиваемый набор фреймов в iframe документ


person Asur    schedule 09.07.2011    source источник


Ответы (2)


Если вы хотите межоконную связь в одном домене, вы можете настроить ее через localStorage. Когда вы добавляете элемент в localStorage, вы получаете событие окна "storage" во всех других окнах / фреймах / вкладках того же домена.

Итак, вы в основном localStorage.setItem('name', 'value') в одном iframe, пока слушаете window.addEventListener('storage', (event) => {/* handle message */}) и получаете сообщение.

person meandre    schedule 11.08.2017

Взгляните на следующее описание функции postMessage и того, как ее можно использовать. . Итак, в frame1 вы вызываете метод postMessage, а во frame2 вы подписываетесь на уведомления. Очевидно, что используемый вами браузер должен поддерживать этот API.

Также есть очень хороший плагин jQuery, который обертывает этот API и упрощает его использование. Он также работает в браузерах, которые не поддерживают метод postMessage с использованием хеш-части URL-адреса.

person Darin Dimitrov    schedule 09.07.2011
comment
@sawren, да, могут, даже если они находятся в разных доменах. - person Darin Dimitrov; 09.07.2011
comment
@DarinDimitrov, нет, конечно, нет. OP спросил, как два дочерних окна iframe могут взаимодействовать друг с другом. С помощью только postMessage они не могут, потому что у них нет доступа к родительскому DOM, И они не видят друг друга, И родитель не может передать ссылку на iframe в другой iframe. Я бы предложил либо настроить RPC между двумя iframe в родительском (если эти iframe являются частью SDK, который вы интегрируете в родительский). Или просто используйте localStorage и событие хранилища окон (самое простое решение). - person meandre; 11.08.2017