从postbacked父窗口关闭儿童窗口

时间:2012-07-10 04:45:03

标签: c# javascript asp.net

我需要关闭已由父窗口加载的子窗口 使用window.open()方法打开子窗口 我需要通过单击父窗口中的注销按钮或关闭按钮来关闭这个子窗口 我的代码:

    var childWin = [];
    //child window open event
    function child_open(url)
    {
        childWin[childWin.length] = window.open(url);
    }

    //a logout button or close button event
    function parent_close() 
    {
        for (i=0; i<childWin.length; i++) 
        {
            if (childWin[i] == null) return false;
            childWin[i].close();
        }
        window.close();
    }

如果父窗口不回发到服务器,则此代码可以。 当在父窗口中发生回发时,变量(childWin)的值消失了,我无法通过此代码关闭子窗口。
问题是 - 想要关闭子窗口,甚至是父回帖。 有没有解决方案?
感谢您的所有兴趣和回复。

1 个答案:

答案 0 :(得分:1)

每次加载页面时都会清除数组childWin。所以回帖后,数组中什么都没有。这就是为什么儿童窗户没有关闭。

提到了一个解决方法here

尝试这样的事情[未经过测试,不确定它是否会起作用,只需试一试:)]

父窗口(所有页面)

var childStatus = {};

子窗口

var timerHandler,
    windowName = window.name,
    popupHandle = "";

funciton ChildCallBack()
{
  try
  {
    if(popupHandle == "" || popupHandle == null)
    {
       popupHandle = window.opener.childStatus[windowName];
       //ChildCallBack(); // no need of ChilCallBack here, since we already have timer
    }
    else
    {
       window.opener.childStatus[windowName] = popupHandle;        
    }
  }
  catch(e)
  {
  }
}

timerHandler = window.setInterval(ChildCallBack, 500);

function window_onclose()
{
  try
  { 
    window.clearInterval(timerHandler);
    window.opener.childStatus[windowName] = null;
  }
  catch(e)
  {
  }
}

window.onclose = window_onclose;

您的子窗口打开功能

//child window open event
    function child_open(url)
    {
        var winHandle = window.open(url, "GIVE SOME UNIQUE NAME FOR EACH WINDOW HERE");
        winHandle.popupHandle = winHandle;
    }

您的关闭按钮事件

//a logout button or close button event
    function parent_close() 
    {
        for (var key in childStatus)
        {
            if (childStatus[key] != null) 
            {
              childStatus[key].close();
            }
        }
        window.close();
    }

查询的可能修复&gt;&gt;但是,在子回发之后,parent_close()中发生错误(childStatus [key]中的值不是对象,它不能执行childStatus [key] .close())

替换

timerHandler = window.setInterval(ChildCallBack, 100);

if(popupHandle == "" || popupHandle == null)
{
   // get the popupHandle from parent window
   popupHandle = window.opener.childStatus[windowName];
   timerHandler = window.setInterval(ChildCallBack, 100);
}