top和parent是Javascript的内置对象,在框架(iframe)结构中常被用到,关于两者的区别如下:
top: 该变更永远指分割窗口最高层次的浏览器窗口。如果计划从分割窗口的最高层次开始执行命令,就可以用top变量。
parent: 该变量指的是包含当前分割窗口的父窗口。如果在一个窗口内有分割窗口,而在其中一个分割窗口中又包含着分割窗口,则第2层的分割窗口可以用parent变量引用包含它的父分割窗口。
附:Window对象、Parent对象、Frame对象、Document对象和Form对象的阶层关系 Window对象→Parent对象→Frame对象→Document对象→Form对象,如下: parent.frame1.document.forms[0].elements[0].value;
笔者在开发中发现一个有趣的现象,页面上多层iframe嵌套的结构,即iframe里嵌iframe
<html>
<body>
<script>
var debug = function(){
alert('debug');
};
</script>
<iframe id=“frm1”>
<html>
<body><iframe id="frm2"></iframe></body>
</html>
</iframe>
</body>
</html>
在frm2中执行js代码:
parent.debug();
在IE7+ Chrome SF FF 均能正常执行,而IE6却不行。究起原因,是IE7+ Chrome SF FF等浏览器在处理parent对象时,会类似作用域链的方式,一级级的向上查找,因此能找到顶层函数,而IE6则相对弱智一点,在上一级父窗口中找不到就不再去找了。