我正在尝试将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>
.
$(document).ready(function() {
var iframe = $( "#source" );
$( "a[target=_top]" ).click( function(){
iframe.attr( "src", this.href );
return false;
});
});
6 回答
这是一个小型库,它解决了将iFrame调整为包含内容的所有问题 .
https://github.com/davidjbradshaw/iframe-resizer
它通过使用post-message API处理跨域问题,还以几种不同的方式检测iFrame内容的更改 .
适用于所有现代浏览器和IE8以上版本 .
编辑:为了确定跨域iframe高度,您还必须有权在iframe的页面上实现脚本 .
最小的跨域集我用于在页面上嵌入适合的单个iframe .
在嵌入页面(包含iframe)时:
在嵌入页面(iframe)上:
你得到一个iframe的内容高度,例如像这样:
UPDATE
但是,跨域可能存在问题 . 以下是一些显示不同方法的来源:
http://css-tricks.com/cross-domain-iframe-resizing/
How to get height of iframe cross domain
Resize iframe height according to content height
Resizing an iframe based on content
Get value of input field inside an iframe
注意:后者显示了如何访问字段,但访问体高的原则相同
您还需要在网站上访问,以便进行iframing . 我在这里找到了最好的解决方案:https://gist.github.com/MateuszFlisikowski/91ff99551dcd90971377
yourotherdomain.html
你的网站有iframe
javascript中没有选项可以找到跨域iframe高度的高度,但是你可以借助一些服务器端编程来完成这样的事情 . 我在这个例子中使用了PHP
如果您有权操作要加载的站点的代码,则以下内容应提供一种全面的方法,以便在框架内容的高度发生变化时随时更新
iframe
容器的高度 .将以下代码添加到要加载的页面(可能在 Headers 中) . 此代码在DOM更新时(如果您正在延迟加载)发送包含HTML容器高度的消息,或者调整窗口大小(当用户修改浏览器时) .
将以下代码添加到存储iframe的页面 . 这将更新iframe的高度,因为该消息来自iframe加载的页面 .