1

我在 iframe 中使用这种结构将其高度发送到父窗口:

<body onload="parent.postMessage(document.body.scrollHeight, '*');">
    ...
</body>

父窗口中有一个监听器:

function resizeCrossDomainIframe(id)
{
    var iframe = document.getElementById(id);
    window.addEventListener('message', function (event)
    {
        if (isNaN(event.data)) return;
        var height = parseInt(event.data);
        iframe.height = height + "px";
    }, false);
}

<iframe id="voice-iframe" scrolling="no" frameborder="0" onload="resizeCrossDomainIframe('voice-iframe');" src="http://localhost:2040/VoiceApi/Base">
</iframe>

此代码适用于 ff、chrome、safari、ie9,可能适用于 ie8,但不适用于歌剧 11(尽管蜻蜓没有显示错误)。我认为ie会有一些问题,但最后一个版本的opera不会。或者我做错了什么?

4

1 回答 1

0

我认为 onload首先会在 IFRAME内部触发,然后 postMessage() 会导致消息事件发生,最后会触发 IFRAME 上的 onload属性。如果您从 IFRAME 标记的 onload 处理程序添加事件侦听器,您可能会在消息发送后开始侦听,因此您不会收到任何内容。

于 2011-09-12T22:42:01.223 回答