我需要关闭已由父窗口加载的子窗口
使用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)的值消失了,我无法通过此代码关闭子窗口。
问题是 - 想要关闭子窗口,甚至是父回帖。
有没有解决方案?
感谢您的所有兴趣和回复。
答案 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);
}