サブウィンドウの二重起動を防ぐ JavaScript

懐かしいコードが出てきたので紹介。

確か IE で window.open() しようとした時に、既に開いているウィンドウを無視して同じページを別ウィンドウで開いてしまうのが気になって、それをなんとかするために作ったモノ。だから変数宣言が var だったりする。

/**
 * 二重起動を防ぎウィンドウを開く
 * 
 * @param {string} windowName ウィンドウ名
 * @param {string} url 開きたい URL
 */
function openWindow(windowName, url) {
  // 指定のウィンドウ名で空の URL を開いてみる
  var win = window.open('', windowName);
  
  // 開いたウィンドウの URL が about:blank だったら、空ウィンドウが開けたことになる
  if(win.location.href === 'about:blank') {
    // 空ウィンドウが開けた = その名前のウィンドウはそれまで存在していなかったので
    // 開いたウィンドウの location.href に開きたいページを指定する
    win.location.href = url;
  }
  else {
    // ウィンドウの URL が about:blank ではなかった場合、既にそのウィンドウは存在している
    // この場合も変数 win にはウィンドウの参照が取得できているので、以下のように掴んだウィンドウを閉じて開き直したりできる
    win.close();
    window.open(url, windowName);
  }
}

もう言うことはない。