Я использую сообщение для динамической регулировки высоты iframe. HTML-код, содержащий iframe, добавляет прослушиватель, который запускает изменение размера кадра. (Упрощенный) соответствующий код родительского элемента выглядит примерно так:
<div id="dynamic_content">
<iframe src="http://my.content"></iframe>-->
</div>
<script>
window.onload = function () {
window.addEventListener("message", handleEventTrigger, false);
};
function handleEventTrigger(evt) {
var height = evt.data;
alert("Received: " + evt.data);
if (isNumber(height)) {
$("#dynamic_content").height(height + "px");
}
}
function isNumber(str) {
return !isNaN(str - 0);
}
</script>
В источнике для iframe я запускаю postMessage при загрузке. В основном у меня есть div с id externalDiv, который я хочу отправить высоту. Соответствующий код JavaScript:
window.onload = function () {
var height = $("#outerDiv")[0].offsetHeight;
if (isNumber(height)) {
parent.postMessage(height, "*");
}
};
Моя проблема сейчас в том, что это работает только изредка. Я предполагаю, что между добавлением прослушивателя события и отправкой сообщения есть гонка. Я полагаюсь на то, что связал прослушиватель событий до того, как сообщение будет запущено. Как правильно это обеспечить? Оба связаны с window.onload
. Они относятся к одному и тому же window
, и это проблема?