JavaScript系列之防止出现窗口孤儿

ZDNet软件频道 时间:2004-05-11 作者:Builder.com |  我要评论(13)
本文关键词:javatips
这个技巧是个警告:如果你打开第二个窗口,然后又打开了第二个窗口的子窗口,即第三个窗口,接着又关闭了第二个窗口;那么第二个窗口的父窗口将不再能控制第三个窗口。关闭中间窗口将破坏中间窗口的父窗口和子窗口之间的(对象)层次关系。
本文译自Builder.com,未经许可请勿转载

这个技巧是个警告:如果你打开第二个窗口,然后又打开了第二个窗口的子窗口,即第三个窗口,接着又关闭了第二个窗口;那么第二个窗口的父窗口将不再能控制第三个窗口。关闭中间窗口将破坏中间窗口的父窗口和子窗口之间的(对象)层次关系。

我们说,有时候破坏这种对象层次关系会是无害的,但不总是这样。考虑下面的这个例子,比如说一个过渡弹出窗口,它在打开一个新窗口之后自动关闭。

第二个弹出窗口包含一个函数,它测试第三个窗口是否已经打开:

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 中将会产生一个错误。打破窗口对象层次一定要谨慎地权衡。


本文作者:Brent Lee Metcalfe 是一位 Web 架构顾问。


责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134