Corredor

ウェブ、プログラミングの勉強メモ。

サブウィンドウの二重起動を防ぐ 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);
  }
}

もう言うことはない。

レガシーコード改善ガイド (Object Oriented SELECTION)

レガシーコード改善ガイド (Object Oriented SELECTION)

  • 作者: マイケル・C・フェザーズ,ウルシステムズ株式会社,平澤章,越智典子,稲葉信之,田村友彦,小堀真義
  • 出版社/メーカー: 翔泳社
  • 発売日: 2009/07/14
  • メディア: 大型本
  • 購入: 45人 クリック: 673回
  • この商品を含むブログ (157件) を見る

レガシーソフトウェア改善ガイド

レガシーソフトウェア改善ガイド