1

easyXDM を使用して、コンテンツの高さに基づいて iframe の高さを動的にサイズ変更しようとしています。コードは 5 秒ごとに iframe の body.scrollheight をチェックする呼び出しを行います。ページの高さが変更された場合、iframe の高さは 5 秒ごとに更新されます。最初の呼び出しで機能します-iframeのサイズも適切に変更されます。問題は、iframe コンテンツの高さが変更された場合でも、プロバイダーが引き続きコンテンツの元の高さを返すことです。

コード:

消費者 (iframe を含むページ):

var socket = new easyXDM.Socket({
remote: "http://remoteDomain.ca/blahblah.html",
container: "embedded",
onMessage: function(message, origin){
    alert(message); //continually alerts "542px" even when body.scrollheight 
                    // has changed
   document.getElementById('iframe').style.height = message + "px";  
   var t = setTimeout(function() {
      socket.postMessage();
   }, 5000);
},
onReady: function() {
    socket.postMessage();
}
});

プロバイダー (iframe コンテンツ):

var socket = new easyXDM.Socket({
    onMessage: function(message, origin){
        socket.postMessage(document.body.scrollHeight);
    }
});
4

1 に答える 1

1

easyXDM を試した後、最終的に別のサンプルを使用して動作しました: http://stevesouders.com/misc/test-postmessage.php

ソースページでは:

<script type="text/javascript">
    setInterval(function () {
        parent.postMessage(document.body.scrollHeight, '*');
    }, 500);    
</script>

フレーム内ページ:

<script type="text/javascript">

    if (window.attachEvent) {
        // IE
        window.attachEvent("onmessage", handleMessage);
    }

    if (window.addEventListener) {
        // FF
        window.addEventListener("message", handleMessage, false);
    }

    function handleMessage(e) {
        $("#frameId").attr("height", e.data);
    }

</script>
<iframe id="frameId" src="http://mysourceurl.com.br/" width="100%"
    frameborder="0" scrolling="no"></iframe>

魔法のように働きました!iframe の高さは、setInterval の反復ごとに更新されます。

于 2012-06-06T15:00:33.373 に答える