65.9K
CodeProject 正在变化。 阅读更多。
Home

JavaScript 中窗口的父子关系

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.36/5 (8投票s)

2004年12月16日

2分钟阅读

viewsIcon

138579

downloadIcon

459

使用子窗口控制父窗口。

引言

在本文中,我们将讨论 JavaScript 的父子行为。

描述

为了更好地理解父子关系,我们举一个例子。我有一个浏览器窗口,并在其中点击一个链接。这个链接将打开一个子窗口,而在子窗口中,我又有一些链接。一些在子窗口中可用的链接将在新窗口中打开页面。现在,如果这个过程不断重复,从第一个浏览器窗口(父窗口)开始,最终会产生一些 'n' 个子-子窗口的关系。问题是,从第 n 个子窗口,我想在父窗口(第一个浏览器窗口)中打开一个链接。你将如何实现这一点?

我们将在下面的代码块中讨论这个问题

if(typeof(window.opener)!="undefined") 
{ 
   var x_win = window.self; 
   while(x_win!="undefined") 
   { 
      x_win = x_win.opener; 
      if(typeof(x_win.opener)=="undefined")                                   
      { 
         x_win.location.href="http://www.thecodeproject.com/"; 
         break; 
      } 
   } 
} 
else 
{ 
         window.location.href="http://www.thecodeproject.com/"; 
}

在代码的第一行 (typeof(window.opener)!="undefined") 中,我们检查窗口是否有父窗口?如果有,之后我声明一个变量 x_win 并使用 window.self 赋予当前窗口的引用。由于我们想要实现子窗口或子子窗口的链接在父窗口中打开的功能,我们通过一个 while(x_win!="undefined") 循环,确保我到达正确的位置。在 while 循环内部,我将变量 x_win = x_win.opener 赋值给它,以确保子窗口或子子窗口现在指向其父窗口,并且此时我位于父窗口,因此我需要检查一个条件 typeof(x_win.opener)=="undefined"。每当我成功通过该条件,就意味着我已经准备好更改主页的布局或任何你想要做的事情。

现在,关于父子关系的一切都已简化。让我问你一个问题:如果我关闭了 'n' 个子窗口中的一个子窗口会发生什么?嗯,你说得对,它会抛出一个异常,这是需要处理的。因此,在添加了一些异常处理后,上面的代码将如下所示

try
{
     if(typeof(window.opener)!="undefined") 
     { 
        var x_win = window.self; 
        while(x_win!="undefined") 
        { 
           x_win = x_win.opener; 
           if(typeof(x_win.opener)=="undefined")
            { 
              x_win.location.href="http://www.thecodeproject.com/"; 
              break; 
            } 
        } 
     } 
     else 
     { 
         window.location.href="http://www.thecodeproject.com/"; 
     }
}
catch(e)
{
    window.open("/"); // Here you can choose any operation, 
                      // which you want to do in case of a exception
}

祝你编码愉快...

© . All rights reserved.