调整跨域Iframe高度

use*_*185 32 html javascript css iframe jquery

我正在尝试将iframe height参数更改为iframe中加载的页面的相同px.在iframe中加载的页面来自另一个域.

将在iframe内部加载不同的页面,从而导致iframe内容的高度发生变化,因此我需要获取iframe内容高度并将其应用于iframe height参数.

这是我正在谈论的一个例子:http://jsfiddle.net/R7Yz9/3/

<div class="site"><a href="http://amazon.com/" target="_top">Amazon </a></div>
<div class="site"><a href="http://cnn.com/" target="_top">Cnn </a></div>
<div class="site"><a href="http://wikipedia.org/" target="_top">Wikipedia </a></div>
<iframe id="source" src="http://amazon.com/" frameborder="0" scrolling="no" width="100%" height="100%"></iframe>
Run Code Online (Sandbox Code Playgroud)

.

$(document).ready(function() {
    var iframe = $( "#source" );
    $( "a[target=_top]" ).click( function(){
        iframe.attr( "src", this.href );
        return false;
    }); 
});
Run Code Online (Sandbox Code Playgroud)

Dav*_*haw 27

这是一个小型库,可以解决将iFrame调整为包含内容的所有问题.

https://github.com/davidjbradshaw/iframe-resizer

它通过使用post-message API处理跨域问题,并且还以几种不同的方式检测iFrame内容的更改.

适用于所有现代浏览器和IE8以上版本.

编辑:为了确定跨域iframe高度,您还必须有权在iframe的页面上实现脚本.

  • 我认为这有点欺骗性.大多数人(包括OP)都在询问他们无法在问题中将代码放入代码中的网站,如亚马逊,美国有线电视新闻网等.是的,如果您可以访问所有代码但是说它的跨域是故意偷偷摸摸的,那么这个插件可能会有用. (68认同)
  • 它不适用于跨域 (4认同)
  • @budamivardi它确实跨域工作,你只需要将第二个脚本放在远程域上. (4认同)
  • 伟大的插件大卫. (3认同)
  • 我投了反对票,因为这个解决方案不是一个完整的“跨域”解决方案。请添加附加信息,说明仅当您有权访问两个域时它才适用于“跨域”情况,正如 @o_O 所说,这是我们大多数人都试图解决的情况。 (2认同)

MTJ*_*MTJ 10

最小的跨域集我用于在页面上嵌入适合的单个iframe.

在嵌入页面(包含iframe)时:

<iframe frameborder="0" id="sizetracker" src="http://www.hurtta.com/Services/SizeTracker/DE" width="100%"></iframe>
<script type="text/javascript">
  // Create browser compatible event handler.
  var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
  var eventer = window[eventMethod];
  var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
  // Listen for a message from the iframe.
  eventer(messageEvent, function(e) {
    if (isNaN(e.data)) return;

    // replace #sizetracker with what ever what ever iframe id you need
    document.getElementById('sizetracker').style.height = e.data + 'px';

  }, false);
</script>
Run Code Online (Sandbox Code Playgroud)

在嵌入页面(iframe)上:

<script type="text/javascript">
function sendHeight()
{
    if(parent.postMessage)
    {
        // replace #wrapper with element that contains 
        // actual page content
        var height= document.getElementById('wrapper').offsetHeight;
        parent.postMessage(height, '*');
    }
}

// Create browser compatible event handler.
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";

// Listen for a message from the iframe.
eventer(messageEvent, function(e) {

    if (isNaN(e.data)) return;

    sendHeight();

}, 
false);
</script>
Run Code Online (Sandbox Code Playgroud)


小智 6

您还需要访问要进行 iframe 构建的站点。我在这里找到了最好的解决方案:https : //gist.github.com/MateuszFlisikowski/91ff99551dcd90971377

yourotherdomain.html

<script type='text/javascript' src="js/jquery.min.js"></script>
<script type='text/javascript'>
  // Size the parent iFrame
  function iframeResize() {
    var height = $('body').outerHeight(); // IMPORTANT: If body's height is set to 100% with CSS this will not work.
    parent.postMessage("resize::"+height,"*");
  }

  $(document).ready(function() {
    // Resize iframe
    setInterval(iframeResize, 1000);
  });
</script>
Run Code Online (Sandbox Code Playgroud)

您的网站与 iframe

<iframe src='example.html' id='edh-iframe'></iframe>
<script type='text/javascript'>
  // Listen for messages sent from the iFrame
  var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
  var eventer = window[eventMethod];
  var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";

  eventer(messageEvent,function(e) {
    // If the message is a resize frame request
    if (e.data.indexOf('resize::') != -1) {
      var height = e.data.replace('resize::', '');
      document.getElementById('edh-iframe').style.height = height+'px';
    }
  } ,false);
</script>
Run Code Online (Sandbox Code Playgroud)