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 で動作しますが、opera 11 では動作しません (トンボではエラーは表示されません)。ie にはいくつか問題があると思いましたが、最新バージョンの Opera には問題がありませんでした。または多分私はsmth間違っていますか?

4

1 に答える 1

0

最初に IFRAME内でonload が発生し、postMessage() によってメッセージ イベントが発生し、最後に IFRAME の onload属性がトリガーされると思います。IFRAME タグの onload ハンドラーからイベント リスナーを追加すると、おそらくメッセージが送信された後にリッスンを開始するため、何も受信しません。

于 2011-09-12T22:42:01.223 に答える