3

「親」ウィンドウを持つアプリケーションがあります。親ウィンドウには、次のようなメニュー項目があります (ここでは PHP を使用)。

// sample link
echo "<li><a href=\"#\" onclick=openurl('covershift.php');>Shift Coverage</a></\
li>";

// logout link
echo "<li><a href=\"#\" onclick=openurl('logout');>Logout</a></li>";

各リンクは、適切なページを別の「子」ウィ​​ンドウで開きます。親ウィンドウを閉じると、すべての子ウィンドウを閉じる必要があります。この機能を Javascript で実装しました。ここに関数があります。

var childWindow = new Array();
var windowCount = 0;
function openurl(url)
{
  if(url != 'logout') {
    childWindow[windowCount]=window.open(url,'_blank','height=600,width=800,scr\
ollbars=1');
    windowCount++;
    if (window.focus) {
      childWindow.focus();
    }
  } else {
    var iCount;
    for (iCount=0; iCount < windowCount; iCount++) {
      if ((childWindow[iCount] != null) && !(childWindow[iCount].closed)) {
        childWindow[iCount].close();
      }
    }
    window.location='logout.php';
  }
}

これが私の問題です。ユーザーが親ウィンドウをリロードしてからログアウトをクリックすると、子ウィンドウが開いたままになります。親がリロードすると childWindow 配列が失われるため、これは理にかなっています。

リロードによって childWindow 配列を永続化するにはどうすればよいですか?

ありがとう!

4

2 に答える 2

2

ウィンドウがロードされても JavaScript オブジェクトを持続させることはできないと思います。代わりに、ページを閉じるアンロード イベント ハンドラを作成できますか?

window.onunload = myCloseFunction;
function myCloseFunction()
{
    // Just copying your code...
    var iCount;
    for (iCount=0; iCount < windowCount; iCount++) {
      if ((childWindow[iCount] != null) && !(childWindow[iCount].closed)) {
        childWindow[iCount].close();
      }
    }
}

別のオプションとして、子ウィンドウが親の存在をポーリングするようにすることもできます。

子ウィンドウで:

// Checks every 1 second for valid window.opener
var parentChecker = setInterval(function(){
    if(!opener){
        // Is this good practice?  I don't know!
        clearInterval(parentChecker);
        window.close();
    }
}, 1000);
于 2010-02-12T23:30:15.330 に答える
0

その配列を LocalStorage または Cookie に保存できます

于 2021-09-06T10:58:26.173 に答える