Javascript 内容更改时如何调整跨域iframe的大小?

Javascript 内容更改时如何调整跨域iframe的大小?,javascript,iframe,Javascript,Iframe,我想在我的网站中嵌入一个博客,正如我所看到的,最方便用户的方式是将tumblr博客库化并通过iFrame嵌入。唯一的问题是:在coustomization过程中,我在我的博客中添加了一个“阅读更多”按钮,因此没有必要滚动到每篇文章的完整长度,但现在当用户单击“阅读更多”按钮时,内容“溢出”iFrame的边界和我似乎找不到一种根据内部内容不断更新Hight的方法。我不太了解Js,但我发现了两个脚本: 选项1: iFrame宿主页面: //创建IE+其他兼容的事件处理程序 var eventMet

我想在我的网站中嵌入一个博客,正如我所看到的,最方便用户的方式是将tumblr博客库化并通过iFrame嵌入。唯一的问题是:在coustomization过程中,我在我的博客中添加了一个“阅读更多”按钮,因此没有必要滚动到每篇文章的完整长度,但现在当用户单击“阅读更多”按钮时,内容“溢出”iFrame的边界和我似乎找不到一种根据内部内容不断更新Hight的方法。我不太了解Js,但我发现了两个脚本:

选项1: iFrame宿主页面:


//创建IE+其他兼容的事件处理程序
var eventMethod=window.addEventListener?“addEventListener”:“attachEvent”;
var eventer=window[eventMethod];
var messageEvent=eventMethod==“attachEvent”?“onmessage”:“message”;
//收听来自子窗口的消息
事件器(messageEvent,函数(e){
document.getElementById('content')。style.height=e.data+'px';
},假);
选项1: Tumblr页面:


函数postHeightMessage(){
var actual_height=document.getElementById('content').scrollHeight;
parent.postMessage(实际_高度+50,“*”);
} 
函数adjust_iframe_height(){
//重置iframe高度(适用于Chrome和Safari)
var isChrome=/Chrome/.test(navigator.userAgent);
var isSafari=/Safari/.test(navigator.userAgent);
if(isChrome | | isSafari){
parent.postMessage(200,“*”);
} 
//发送实际iframe高度
设置超时(postHeightMessage,100);
} 
选项2:
我使用了“davidjbradshaw”中的脚本库。我从示例文件中复制了这段代码(“我不太了解Js…”):
iFrame宿主页面:


iFrameResize({
log:true,//启用控制台日志记录
enablePublicMethods:true,//在iframe托管页面中启用方法
resizedCallback:函数(messageData){//在收到resize时回调fn
$('p#callback').html(
“帧ID:”+messageData.iframe.ID+
“高度:”+messageData.Height+
'宽度:'+messageData.Width+
“事件类型:”+messageData.type
);
},
messageCallback:函数(messageData){//收到消息时回调fn
$('p#callback').html(
“帧ID:”+messageData.iframe.ID+
'消息:'+messageData.Message
);
警报(messageData.message);
},
closedCallback:iFrame关闭时函数(id){//回调fn
$('p#callback').html(
'IFrame('+id+
“)已从页面中删除。”
);
}
});
Tumblr页面:


第一个选项工作正常,直到我单击“阅读更多”按钮。。。 如果我知道的没错,第二个选项可以在内容的高度发生变化时更新iFrame的高度,因此我尝试使用它,但它不适用于tumblr博客。。。它可以与其他页面一起工作,但是如果我尝试加载“Cikkek”页面,iFrame就不会调整大小,它将保持与博客之前加载的页面相同的高度

所以我请求你帮我解决这个调整尺寸的问题,我真的非常感谢你的帮助,谢谢你抽出时间

网页:
(如果它不可用,请原谅我!我正在我的笔记本电脑上托管它,直到它还没有完全准备好,但我会尽我所能在未来几天内使它可用。)


科瓦茨·莱文特(Kovács Levente)

我发现,这不是终极答案,而是“对我来说足够好”的答案: 我在服务器上创建了一个“cikkek.php”,并使用include调用了tumblr博客,现在它可以使用选项2(但是帖子右下角的按钮不起作用,如果我单击“阅读更多”按钮,它会调整大小)


我发现,不是终极答案,而是“对我来说足够好”的答案: 我在服务器上创建了一个“cikkek.php”,并使用include调用了tumblr博客,现在它可以使用选项2(但是帖子右下角的按钮不起作用,如果我单击“阅读更多”按钮,它会调整大小)


Tumblr博客:Tumblr博客:
<script type="text/javascript"> 
            // Create IE + others compatible event handler 
            var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent"; 
            var eventer = window[eventMethod]; 
            var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message"; 

            // Listen to message from child window 
            eventer(messageEvent, function (e) { 
              document.getElementById('content').style.height = e.data + 'px'; 
            }, false); 
</script>
<script type="text/javascript"> 
    function postHeightMessage() { 
      var actual_height = document.getElementById('content').scrollHeight; 
      parent.postMessage(actual_height + 50, "*"); 
    } 

    function adjust_iframe_height() { 
      // Reset iframe height (for Chrome and Safari) 
      var isChrome = /Chrome/.test(navigator.userAgent); 
      var isSafari = /Safari/.test(navigator.userAgent); 
      if (isChrome || isSafari) { 
        parent.postMessage(200, "*"); 
      } 

      // Send actual iframe height 
      setTimeout(postHeightMessage, 100); 
    } 
</script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
    <script src="/site/iframe-resizer-master/js/iframeResizer.min.js" type="text/javascript"></script>
    <script type="text/javascript">

            iFrameResize({
                log                     : true,                  // Enable console logging
                enablePublicMethods     : true,                  // Enable methods within iframe hosted page
                resizedCallback         : function(messageData){ // Callback fn when resize is received
                    $('p#callback').html(
                        '<b>Frame ID:</b> '    + messageData.iframe.id +
                        ' <b>Height:</b> '     + messageData.height +
                        ' <b>Width:</b> '      + messageData.width + 
                        ' <b>Event type:</b> ' + messageData.type
                    );
                },
                messageCallback         : function(messageData){ // Callback fn when message is received
                    $('p#callback').html(
                        '<b>Frame ID:</b> '    + messageData.iframe.id +
                        ' <b>Message:</b> '    + messageData.message
                    );
                    alert(messageData.message);
                },
                closedCallback         : function(id){ // Callback fn when iFrame is closed
                    $('p#callback').html(
                        '<b>IFrame (</b>'    + id +
                        '<b>) removed from page.</b>'
                    );
                }
            });


</script>
<script src="../js/iframeResizer.contentWindow.min.js" type="text/javascript"></script>
<script src="http://fiktiv.dyndns.org/site/iframe-resizer-master/js/iframeResizer.contentWindow.min.js" type="text/javascript"></script>
<div style="clear: both; display: block;"></div>
<?php
    include 'http://fiktivcikkek.tumblr.com/';
?>