1

親ウィンドウによってロードされた子ウィンドウを閉じる必要があります。メソッド
を使用して子ウィンドウを開きます。 親ウィンドウにあるログアウトボタンまたは閉じるボタンをクリックして、この子ウィンドウを閉じる必要があります。 私のコード: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();
    }

親ウィンドウがサーバーにポストバックしない場合、このコードはOKです。親ウィンドウでポストバックが発生すると、variable(childWin)の値が消え、このコードでは子ウィンドウを閉じることができません。
問題は、親がポストバックされていても子ウィンドウを閉じたいということです。 これに対する解決策はありますか?
あなたの興味と返事のすべてに感謝します。

4

1 に答える 1

1

配列 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);
}
于 2012-07-10T05:19:43.540 に答える