Связь между двумя фреймами из одного домена с postMessage - PullRequest
2 голосов
/ 09 июля 2011

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

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

parent.frame[x]

Я пытался использовать следующие строки для доступа к DOM iframes

parent.frame[x].contentWindow returns null,

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

Обновление:

Я думаю, мой вопрос недостаточно ясен.В PostMessage API нет проблем, реальная проблема заключается в том, что браузер создает в моем случае пользовательский набор фреймов вокруг документа iframe!

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

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

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

Ответы [ 2 ]

0 голосов
/ 11 августа 2017

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

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

0 голосов
/ 09 июля 2011

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

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

...