Функция postMessage () является асинхронной, то есть сразу возвращается.Таким образом, вы не можете установить синхронную связь с ним.
В вашем примере опубликованное сообщение исчезнет в пустоте, поскольку во время выполнения функции postMessage () нет прослушивателя для события сообщения.
Если вы сначала загрузите iframe, а потом вызовете postMessage (), возможно, возникла проблема с синхронизацией.(Исходя из моего опыта, его нет, родительский код всегда выполняется первым, но я не уверен в этом.)
Ниже приведено мое решение проблемы, заключающейся в том, чтобы точно не знать, когда будет готов iframe.
В родительском окне:
- Загрузить iframe (тоже асинхронный)
- Установить прослушиватель сообщений
- Публиковать сообщение в iframe (просто пытаюсь здесь)
- Дождаться, пока придут другие сообщения
В iframe:
- Настройка прослушивателя сообщений
- Отправка сообщения в родительское окно (просто попытка здесь)
- Ожидание получения новых сообщений
Кто получает первое сообщение отдругая сторона затем начинает реальное общение.
По моему опыту, сообщение от родителя в iframe всегда теряется, поэтому общение начинается, когда родитель получает сообщение от iframe.Но в этой настройке не важно, какой из них запускается первым.