配列 childWin は、ページが読み込まれるたびにクリアされます。したがって、ポストバック後、配列には何もありません。そのため、子ウィンドウが閉じられません。
ここに回避策が記載されています
このようなことを試してみてください[テストされておらず、うまくいくかどうかわからないので、試してみてください:)]
親ウィンドウ (全ページ)
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();
}
クエリの可能な修正 >> しかし、 child のポストバック後に、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);
}