最近接手了一个web项目,由于一些很蛋疼的压力迫于无奈使用了iFrame来做页面布局,高度自适应问题自然就被提上台面儿了。在网上找了很多的解决办法无果,要么是干脆无效,要么是iframe首次加载的时候高度ok,用ajax加载几个元素高度撑大了以后就越界了。最后跟公司几个前端请教最终修成正果,闲话少说直接上代码
var frameHandler = function() {
var inner;
var iframeId = "";
return inner = {
_isSupport : false,
init : function() {
},
create : function(frame) {
iframeId=frame.id;
frame.frameBorder = "none";
frame.scrolling = "no";
frame.style.marginTop = '40px';
frame.contentWindow.focus();
inner.check();
if (inner._isSupport) {
if (!frame.addEventListener) {
frame.attachEvent("onload", function() {
frame.detachEvent("onload", arguments.callee);
inner.adjustFrameHeight();
frame.contentWindow.attachEvent("onresize", inner.adjustFrameHeight);
});
} else {
frame.addEventListener("load", function() {
frame.removeEventListener('load', arguments.callee, false);
inner.adjustFrameHeight();
frame.contentWindow.document.documentElement.addEventListener('DOMSubtreeModified', inner.adjustFrameHeight, false);
}, false);
}
} else if (frame.addEventListener) {// for FF 2, Safari 2, Opera 9.6+
frame.addEventListener("load", function() {
var fn = arguments.callee;
setTimeout(function() {
frame.removeEventListener('load', fn, false);
}, 100);
inner.adjustFrameHeight();
frame.contentWindow.document.documentElement.addEventListener('DOMNodeInserted', inner.adjustFrameHeight, false);
frame.contentWindow.document.documentElement.addEventListener('DOMNodeRemoved', inner.adjustFrameHeight, false);
}, false);
}
},
getFrame : function() {
return document.getElementById(iframeId).contentWindow;
},
adjustFrameHeight : function() {
var elem = document.getElementById(iframeId);
elem.style.height = Math.max(elem.contentWindow.document.body.scrollHeight, elem.contentWindow.document.documentElement.scrollHeight) + 'px';
},
check : function() {
var remain = 1,
doc = document.documentElement,
dummy;
if (doc.addEventListener) {
doc.addEventListener("DOMSubtreeModified", function() {
inner._isSupport = true;
doc.removeEventListener("DOMSubtreeModified", arguments.callee, false);
}, false);
} else {
inner._isSupport = true;
return ;
}
dummy = document.createElement("div");
doc.appendChild( dummy );
doc.removeChild( dummy );
}
}
}();
关键是对DOMSubtreeModified、DOMNodeInserted、DOMNodeRemoved这几个事件的监听,dom结构有变化的时候也可以自适应了。有需要的尽管拿去吧
附上一个示例(chrome下需要把页面放在apache之类的服务器上才能正常,其他的本地运行也ok)
分享到:
相关推荐
因为有一个项目要用到iframe自适应高度,网上搜索了以下结果无数,不过看来看去都是那...iframe自适应高度,亲测完美兼容IE6_7_8_9,Chrome谷歌浏览器,Opera欧朋浏览器,FireFox火狐浏览器,Mac Safari浏览器等五大浏览器
### 解决IE、Firefox、Chrome、Safari浏览器中iframe显示高度自适应问题 在Web开发中,`iframe`(Inline Frame)元素常被用于嵌入另一个HTML文档到当前页面中,这种技术为开发者提供了极大的便利,例如加载广告、...
总的来说,通过使用JavaScript动态计算`<iframe>`内容的高度并设置`<iframe>`的高度,可以有效地解决`<iframe>`内容高度自适应以及设置高度后无法缩小的问题。同时,要注意兼容性问题和跨域限制,以确保在各种环境下...
2. **IE8**:虽然支持`contentWindow`和`contentDocument`,但没有`MutationObserver`,所以需要在`window.onload`或`iframe.onload`事件中处理高度自适应。 3. **Firefox**:Firefox通常能较好地处理`iframe`,但...
标题提到的“iframe自动适应高度(完美自适应高度嵌套代码)”提供了一个解决方案,它能够确保`iframe`在各种主流浏览器中都能正确地自适应内容高度,包括360浏览器、IE6-9、遨游、火狐以及搜狗浏览器。 在传统的`...
通过使用jQuery来实现iframe的高度自适应,我们可以确保内容在不同浏览器(包括IE、Firefox、Safari和Chrome)中的显示一致性,无论iframe内嵌的页面有多复杂。 首先,我们需要理解iframe的基本概念。IFrame,即...
在 iframe 高度自适应中,需要考虑多种浏览器的兼容性问题,包括 Firefox、IE、Opera 等不同的浏览器。因此,需要使用不同的方法来实现 iframe 高度的自适应。 方法一:使用 JavaScript 控制 iframe 高度自适应 ...
"Iframe高度自适应(兼容IE/Firefox、同域/跨域)"这一主题是关于如何让内嵌在Iframe中的页面能够根据其内容动态调整自身的高度,确保在不同浏览器(如IE和Firefox)以及处理同域和跨域情况时都能正常显示。...
在网页开发中,有时我们需要使用`iframe`来嵌入外部页面或者内容,但是`iframe`的高度自适应问题一直是一个常见的挑战。特别是在不同浏览器之间,由于兼容性问题,往往需要额外的处理才能达到理想的效果。本篇文章将...
标题“Iframe 高度自适应浏览器高度”涉及的核心知识点是如何让Iframe的大小根据其内容自动调整,特别是高度,以便始终保持与浏览器窗口的高度同步,从而提供更好的用户体验。 首先,我们需要了解Iframe的基本结构...
### iframe高度自适应技术详解 在网页开发过程中,经常会遇到需要在一个页面中嵌入另一个页面的需求,这通常通过HTML的`iframe`元素实现。然而,一个常见的问题是当嵌入的内容高度变化时,如何使`iframe`的高度能够...
总结,`iframe`高度自适应是前端开发中的常见问题,解决这个问题需要根据实际情况选择合适的方法,包括利用CSS、JavaScript、`window.postMessage` API,以及处理IE浏览器的兼容性问题。在实际操作中,一定要注意...
iframe包含的页面的高度,兼容性好,iframe高度自适应
iframe高度自适应代码及演示页面。 适合新手,用到iframe,并且需要高度自适应的人士。 老手自动绕行,又没什么技术含量。。。 解压之后,打开iframe-auto.html之后查看效果. 如果不能查看,检查是否允许执行js
### iframe自适应高度(兼容多种浏览器) 在网页开发过程中,`iframe`是一种常用的元素,用于在当前页面中嵌入另一个HTML文档。然而,默认情况下,`iframe`的高度是固定的,这可能会导致内容显示不完全或者出现不必要...
本文将详细讲解如何使用JavaScript实现`iframe`自适应高度的解决方案,确保在各种主流浏览器中都能正常工作。 首先,理解`iframe`的基本结构和属性是至关重要的。`iframe`标签通常包含`src`属性,用于指定要加载的...
iFrame 自适应高度是前端开发中常见的问题,很多开发者在搜索引擎中搜索相关解决方案,但大多数文章只能解决静态高度的问题,而忽视了 JS 操作 DOM 之后的动态同步问题。同时,在浏览器兼容性方面也存在一定的漏洞。...
本文详细介绍了如何实现`iframe`的高度和宽度自适应,包括基本原理、示例代码以及解决兼容性问题的方法。通过这些技术,可以使`iframe`更加灵活地适应不同的内容变化,提高用户体验。在实际应用中,还需要根据具体...