Я пытаюсь отправить сообщение между двумя файлами, которые находятся в одной папке в localhost, main.php и iframe.php, но iframe его не слушает, я пытался использовать многие целевые источники следующим образом:
главная страница.php
<body>
<iframe src = "iframe.php" class = "iframe"></iframe>
</body>
<script>
const iframe = document.querySelector('.iframe');
iframe.contentWindow.postMessage("message sent from localhost/mainpage.php","http://localhost/iframe.php");
</script>
и внутри iframe.php, чтобы прослушать сообщение, которое я использую
window.onmessage = function(event) {
alert(event.data);
}
disinfor Привет, ты не отвечаешь на мой вопрос. Я хочу знать, написана ли цель происхождения с ошибкой или нет. Как мне написать исходную цель, чтобы сообщение достигло iframe?
Мне не нужно отправлять функцию в iframe, я хочу отправить сообщение
Это определенно должно быть "[scheme]://[host]:[port]"
, так что я предполагаю, что в вашем случае "http://localhost"
или "http://localhost:12345"
Pieterjan привет, я безуспешно пробовал оба варианта (localhost: 80 это порт моего сервера)
Возможно, вы пытаетесь отправить сообщение до загрузки iframe, до регистрации обработчика onmessage
.
ray Привет, я пытался использовать <script> в голове безрезультатно, теперь видно, что <script> находится ниже <body>, я также использовал window.addEventListener("message",function(){})
в iframe, чтобы прослушать сообщение без успеха. Как отправить сообщение в iframe на локальном хосте с помощью postMessage? Спасибо
Просто чтобы убедиться, что это проблема, оберните вызов postMessage в setTimeout, чтобы задержать его на несколько секунд.
ray Спасибо, вы ответили на мой вопрос, чтобы использовать setTimeout в postMessage, и это сработало, поместите этот комментарий в качестве ответа, чтобы подтвердить его и чтобы другие могли его видеть
@woodfile Опубликовал ответ с одним из многих возможных способов избежать этой проблемы.
Как обсуждалось в комментариях, вы вызываете postMessage
до того, как ваш контент iframe загрузится. Существует множество способов решить эту проблему, один из которых заключается в прослушивании события «загрузки» в iframe перед попыткой его выполнить.
Будет выглядеть примерно так:
const iframe = document.querySelector('iframe');
iframe.addEventListener('load', () => {
console.info('iframe loaded')
// iframe has loaded; can post messages now.
iframe.contentWindow.postMessage("message sent from localhost/mainpage.php","http://localhost/iframe.php");
});
<iframe src = "//example.com"></iframe>
Отвечает ли это на ваш вопрос? Вызов кода JavaScript в iframe с родительской страницы