`
logicigam
  • 浏览: 32917 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

iFrame高度自适应终极解决方案(兼容IE7,8,9 Firefox3.6+,Chrome 12+)

阅读更多

最近接手了一个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自适应高度,亲测完美兼容IE6-9,Chrome,Opera,firefox,safari

    因为有一个项目要用到iframe自适应高度,网上搜索了以下结果无数,不过看来看去都是那...iframe自适应高度,亲测完美兼容IE6_7_8_9,Chrome谷歌浏览器,Opera欧朋浏览器,FireFox火狐浏览器,Mac Safari浏览器等五大浏览器

    解决IE,Firefox,chrome,safari浏览器中iframe显示高度自适应问题

    ### 解决IE、Firefox、Chrome、Safari浏览器中iframe显示高度自适应问题 在Web开发中,`iframe`(Inline Frame)元素常被用于嵌入另一个HTML文档到当前页面中,这种技术为开发者提供了极大的便利,例如加载广告、...

    iframe内容高度 iframe自适应高度终极解决Iframe设置高度后无法缩小问题

    总的来说,通过使用JavaScript动态计算`<iframe>`内容的高度并设置`<iframe>`的高度,可以有效地解决`<iframe>`内容高度自适应以及设置高度后无法缩小的问题。同时,要注意兼容性问题和跨域限制,以确保在各种环境下...

    iframe高度自适应,多浏览器兼容

    2. **IE8**:虽然支持`contentWindow`和`contentDocument`,但没有`MutationObserver`,所以需要在`window.onload`或`iframe.onload`事件中处理高度自适应。 3. **Firefox**:Firefox通常能较好地处理`iframe`,但...

    iframe自动适应高度(完美自适应高度嵌套代码),兼容目前主流浏览器。

    标题提到的“iframe自动适应高度(完美自适应高度嵌套代码)”提供了一个解决方案,它能够确保`iframe`在各种主流浏览器中都能正确地自适应内容高度,包括360浏览器、IE6-9、遨游、火狐以及搜狗浏览器。 在传统的`...

    JQuery IFrame框架高度自适应(支持嵌套–兼容IE,ff,safafi,chrome)

    通过使用jQuery来实现iframe的高度自适应,我们可以确保内容在不同浏览器(包括IE、Firefox、Safari和Chrome)中的显示一致性,无论iframe内嵌的页面有多复杂。 首先,我们需要理解iframe的基本概念。IFrame,即...

    Iframe 高度自适应,js控制Iframe 高度自适应.docx

    在 iframe 高度自适应中,需要考虑多种浏览器的兼容性问题,包括 Firefox、IE、Opera 等不同的浏览器。因此,需要使用不同的方法来实现 iframe 高度的自适应。 方法一:使用 JavaScript 控制 iframe 高度自适应 ...

    Iframe高度自适应(兼容IE/Firefox、同域/跨域)

    "Iframe高度自适应(兼容IE/Firefox、同域/跨域)"这一主题是关于如何让内嵌在Iframe中的页面能够根据其内容动态调整自身的高度,确保在不同浏览器(如IE和Firefox)以及处理同域和跨域情况时都能正常显示。...

    用jquery实现iframe高度自适应实例代码完美兼容多数浏览器

    在网页开发中,有时我们需要使用`iframe`来嵌入外部页面或者内容,但是`iframe`的高度自适应问题一直是一个常见的挑战。特别是在不同浏览器之间,由于兼容性问题,往往需要额外的处理才能达到理想的效果。本篇文章将...

    Iframe 高度自适应浏览器高度

    标题“Iframe 高度自适应浏览器高度”涉及的核心知识点是如何让Iframe的大小根据其内容自动调整,特别是高度,以便始终保持与浏览器窗口的高度同步,从而提供更好的用户体验。 首先,我们需要了解Iframe的基本结构...

    iframe高度自适应.pdf

    ### iframe高度自适应技术详解 在网页开发过程中,经常会遇到需要在一个页面中嵌入另一个页面的需求,这通常通过HTML的`iframe`元素实现。然而,一个常见的问题是当嵌入的内容高度变化时,如何使`iframe`的高度能够...

    iframe高度自适应

    总结,`iframe`高度自适应是前端开发中的常见问题,解决这个问题需要根据实际情况选择合适的方法,包括利用CSS、JavaScript、`window.postMessage` API,以及处理IE浏览器的兼容性问题。在实际操作中,一定要注意...

    iframe页面的高度iframe高度自适应

    iframe包含的页面的高度,兼容性好,iframe高度自适应

    iframe高度自适应代码及演示页面

    iframe高度自适应代码及演示页面。 适合新手,用到iframe,并且需要高度自适应的人士。 老手自动绕行,又没什么技术含量。。。 解压之后,打开iframe-auto.html之后查看效果. 如果不能查看,检查是否允许执行js

    iframe自适应高度(兼容多种浏览器)

    ### iframe自适应高度(兼容多种浏览器) 在网页开发过程中,`iframe`是一种常用的元素,用于在当前页面中嵌入另一个HTML文档。然而,默认情况下,`iframe`的高度是固定的,这可能会导致内容显示不完全或者出现不必要...

    js实现iframe自适应高度

    本文将详细讲解如何使用JavaScript实现`iframe`自适应高度的解决方案,确保在各种主流浏览器中都能正常工作。 首先,理解`iframe`的基本结构和属性是至关重要的。`iframe`标签通常包含`src`属性,用于指定要加载的...

    iframe自适应高度(兼容目前所有主浏览器)

    iFrame 自适应高度是前端开发中常见的问题,很多开发者在搜索引擎中搜索相关解决方案,但大多数文章只能解决静态高度的问题,而忽视了 JS 操作 DOM 之后的动态同步问题。同时,在浏览器兼容性方面也存在一定的漏洞。...

    iframe自适应高度和宽度

    本文详细介绍了如何实现`iframe`的高度和宽度自适应,包括基本原理、示例代码以及解决兼容性问题的方法。通过这些技术,可以使`iframe`更加灵活地适应不同的内容变化,提高用户体验。在实际应用中,还需要根据具体...

Global site tag (gtag.js) - Google Analytics