这个技巧是个警告:如果你打开第二个窗口,然后又打开了第二个窗口的子窗口,即第三个窗口,接着又关闭了第二个窗口;那么第二个窗口的父窗口将不再能控制第三个窗口。关闭中间窗口将破坏中间窗口的父窗口和子窗口之间的(对象)层次关系。
我们说,有时候破坏这种对象层次关系会是无害的,但不总是这样。考虑下面的这个例子,比如说一个过渡弹出窗口,它在打开一个新窗口之后自动关闭。
第二个弹出窗口包含一个函数,它测试第三个窗口是否已经打开:
varwhoAmI = navigator.appName;
function transitory(url) {
var hobo = window.open(url,'bum','scrollbars,resizable,width=640,height=340,left=40,top=40');
if (hobo != null) window.close();
if (whoAmI == 'Netscape' && hobo
!= null) hobo.focus();
}
当第三个窗口打开时,第二个弹出窗口关闭。如果第三个窗口已经打开,函数 transitory() 就实现一些浏览器相关的聚集。
如果你将第三个窗口的 open() 方法的变量的值设置为 null,那么在 IE 4.x 中将会产生一个错误。打破窗口对象层次一定要谨慎地权衡。