获取父窗口中包含自身的iframe

标签:JavaScript

今天在开发时遇到个问题:页面A包含几个标签,在切换标签时,高度会变化。页面B用iframe引用了页面A,并且在A载入完成时,把iframe的高度设为了页面A的高度(调用一个自定义的adjustHeight()函数)。可是在切换标签时,iframe的高度并不会变化,就出现滚动条了。
这个问题的难点在于页面B是框架自动生成的,我没法更改,只能在页面A里修复这个问题。

当然,这个问题的前提是页面A和B是同域的,因为JavaScript无权跨域访问。
于是问题就变成了如何在页面A中获取包含它的iframe对象。

查了半天资料后,我发现DOM确实没提供这个API,于是想到了另一个办法:获取父窗口中所有的iframe对象,遍历它们的,将其contentWindow属性与self比较,相等则表示是包含页面A的那个iframe。
急于下班,其他就不解释了,代码如下:
function resetHeight() {
	if (!parent) {
		return;
	}
	var iframes = parent.document.getElementsByTagName('iframe');
	var length = iframes.length;
	if (length == 0) {
		return;
	}
	try {
		for (var i = 0; i < length; ++i) {
			var iframe = iframes[i];
			if (iframe.contentWindow === self) {
				parent.adjustHeight(iframe);
				return;
			}
		}
	} catch (e) {
	}
}

最后说下document.getElementsByTagName('iframe')与frames的区别。前者得到的是HTMLIFrameElement对象的数组,每个对象都是一个DOM元素;后者得到的是DOMWindow对象的数组,也就是窗口的数组。而HTMLIFrameElement对象有个contentWindow属性,这个属性就是frames之中的窗口对象。

0条评论 你不来一发么↓

    想说点什么呢?