我正在使用发布消息来动态调整 iframe 的高度。保存 iframe 的 html 添加了一个侦听器,该侦听器将触发帧调整大小。父级上的(简化的)相关代码如下所示:
<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。基本上我有一个id为outerDiv的div,我想发送它的高度。相关的javascript代码是:
window.onload = function () {
var height = $("#outerDiv")[0].offsetHeight;
if (isNumber(height)) {
parent.postMessage(height, "*");
}
};
我现在的问题是这只偶尔有效。我假设在添加事件侦听器和触发发布消息之间存在竞争条件。我依赖于在发布消息被触发之前绑定事件侦听器。确保这一点的适当方法是什么?两者都必然window.onload
。这些地址是否相同window
,这是一个/问题吗?