1

IFrame 旨在根据其内容调整大小,它适用于大多数浏览器,但仅适用于Mozilla Firefox,只有第一次加载有效,但之后的加载事件无效。

要让它再次工作,需要刷新页面或先清除浏览器的缓存..

代码如下:

function sizeIFrame() {
var subscriptionFrame = jQuery("#subscriptionFrame");
var innerDoc = (subscriptionFrame.get(0).contentDocument) ?subscriptionFrame.get(0).contentDocument : subscriptionFrame.get(0).contentWindow.document;
subscriptionFrame.height(innerDoc.body.scrollHeight);   }

<iframe id="subscriptionFrame" onload="sizeIFrame();"></iframe>

有人对此有想法吗?

4

2 回答 2

1

您可能有一个 DOM 竞争条件,因为它听起来好像在页面加载时间较长(无缓存)时有效,并且在填充缓存后不起作用。

尝试在属性上使用 jQueryload或事件。onloadjQuery 在幕后处理特殊情况,因此它可能会有所帮助。

<iframe id="subscriptionFrame" onload="sizeIFrame();"></iframe>
<script type="text/javascript">
$('#subscriptionFrame').load(function()
{
    var subscriptionFrame = this;
    var innerDoc = (this.contentDocument) ? this.contentDocument : this.contentWindow.document;
    $(this).height(innerDoc.body.scrollHeight);    
});
</style>
于 2012-09-19T05:57:11.753 回答
1

固定的!解决方法如下:

function sizeIFrame() {
    var subscriptionFrame = jQuery("#subscriptionFrame");
    var innerDoc = (subscriptionFrame.get(0).contentDocument) ? subscriptionFrame.get(0).contentDocument : subscriptionFrame.get(0).contentWindow.document;
    if(innerDoc.body.scrollHeight==0)
        innerDoc.location.reload(true);
    subscriptionFrame.height(innerDoc.body.scrollHeight);   
}

这是因为 Firefox 从缓存而不是服务器加载 iframe 内容。所以 xxx.location.reload(true) 将强制 iframe 内容从缓存中加载。希望它可以帮助你们!=)

于 2012-09-20T07:45:50.853 回答