1

我正在按照此处的说明尝试跨站点 iframe 调整大小,但 iframe 仍然未调整大小。我不确定我做错了什么。

iframe 当前位于http: //ayeoui.c​​om/testerpage.php 。这会调用博客文章,该文章会在主 ayeoui.c​​om 域上加载“helper.html”页面,理论上应该将信息传递回第一页并触发调整大小。主站点上的代码是这样说的:

<script>
  // Resize iframe to full height
  function resizeIframe(height)
  {
    // "+60" is a general rule of thumb to allow for differences in
    // IE & and FF height reporting, can be adjusted as required..
    document.getElementById('iframeid').height = parseInt(height)+60;
  }
</script>
<iframe id='iframeid' src='http://rinich.com/blog/11/index.html'></iframe>

链接页面上又写有以下代码:

<body onload="iframeResizePipe()">
<iframe id="helpframe" src='' height='0' width='0' frameborder='0'></iframe>

<script type="text/javascript">
  function iframeResizePipe()
  {
 // What's the page height?
     var height = document.body.scrollHeight;

     // Going to 'pipe' the data to the parent through the helpframe..
     var pipe = document.getElementById('helpframe');

     // Cachebuster a precaution here to stop browser caching interfering
     pipe.src = 'http://www.ayeoui.com/helper.html?height='+height+'&cacheb='+Math.random();

  }
</script>

最后,这将我们带到帮助页面:

<html> 
<!-- 
This page is on the same domain as the parent, so can
communicate with it to order the iframe window resizing
to fit the content 
-->  
  <body onload="parentIframeResize()"> 
    <script> 
      // Tell the parent iframe what height the iframe needs to be
      function parentIframeResize()
      {
         var height = getParam('height');
         // This works as our parent's parent is on our domain..
         parent.parent.resizeIframe(height);
      }

      // Helper function, parse param from request string
      function getParam( name )
      {
        name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
        var regexS = "[\\?&]"+name+"=([^&#]*)";
        var regex = new RegExp( regexS );
        var results = regex.exec( window.location.href );
        if( results == null )
          return "";
        else
          return results[1];
      }
     </script> 
  </body> 
</html>

然而测试页面并没有改变!显然我做错了什么,但我不确定是什么。发生了什么?

4

3 回答 3

0

Uncaught SecurityError: Blocked a frame with origin "http://www.ayeoui.com" from accessing a frame with origin "http://ayeoui.com". Protocols, domains, and ports must match.

您的子域不匹配。http://www.ayeoui.com与 完全不同http://ayeoui.com

于 2013-08-21T18:09:13.550 回答
0

检查您的控制台是否有未捕获的错误类型。您正在从一页重定向到另一页,但 resizeIframe 函数在第二页上不起作用。您应该创建另一个 .js 文件并在链接该文件后调用该函数。那应该行得通。

于 2016-10-07T13:37:18.037 回答
-1

I'm not sure, but this might be the reason: you're getting a same origin policy error.

The console in Chrome's dev tools logs this error: Uncaught SecurityError: Blocked a frame with origin "http://www.ayeoui.com" from accessing a frame with origin "http://ayeoui.com". Protocols, domains, and ports must match.

This is because www.ayeoui.com accesses rinich.com. This isn't allowed (why?).

You could try ensuring everything accesses from/to the same domain: ayeoui.com.


Also, on a separate note, you might want to consider adding the seamless attribute to your iframe, it just makes everything look so much neater (in my opinion):

<iframe id="iframeid" src="http://rinich.com/blog/11/index.html" seamless></iframe>
于 2013-08-08T13:32:40.260 回答