У меня есть простая страница HTML5 с iframe, атрибут src которой изначально является пустой строкой. Страница отображается без ошибок JavaScript.
Атрибут src
элемента iframe устанавливается только после загрузки окна, поэтому изначально загружается пустой iframe. Src iframe устанавливается на страницу из другого домена.
Проблема, с которой я столкнулся, заключается в том, что метод postMessage
работает без каких-либо ошибок, однако исходная страница не запускает событие message
, даже если оно настроено до начала загрузки страницы iframe. У меня появляются предупреждающие сообщения со страницы iframe, что означает, что метод postMessage не вызывал ошибок.
Вопрос
Что мне не хватает при подписке на событие сообщения на исходной странице?
Исходная страница
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Cross domain iframe messaging</title>
<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
<script type="text/javascript">
var iframec = null;
window.addEventListener("load", function () {
iframec = document.getElementById("iframec");
//set up event listener for iframe object so it can receive message from page shown in iframe
iframec.contentWindow.addEventListener("message", function (event) {
alert("received: " + event.data);
}, false);
//load the iframe page but after you have set up to receive messages
iframec.src = "http://www.abcx.com";
});
</script>
</head>
<body>
<form id="form1">
<div>
<h1>Testing iframe messaging in a Cross Domain scenario</h1>
<p> Trying to send a message to an iframe that comes from a page in another domain. The postMessage method does not throw an error when called from the other domain page, but it's not being received by the page having iframe element in it.</p>
<div id="divComments"></div>
<iframe src="" id="iframec" name="iframec" style="border:none;margin:0;padding:0;width:100%; "></iframe>
</div>
</form>
</body>
</html>
JavaScript страницы iframe, который не вызывает ошибок (т. е. страница с адресом http://www.abcx.com
)
<script>
$( document ).ready(function() {
alert("loaded the iframe page on another domain. Just before postMessage");
window.postMessage("Some message was sent from other domain message", "*");
alert("loaded the iframe page on another domain. Just after postMessage");
});
</script>