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