Iframe 调整大小在 Mozilla Firefox 中的第二次加载期间不起作用



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>

有人对此有想法吗?

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

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

<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>

固定!解决方案如下:

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 内容从缓存加载。希望对你们有帮助!=)

最新更新