ウィンドウを警告無しに閉じる

JavaScriptのwindow.open()関数で開いたウィンドウは、window.close()で何事も無く閉じる事ができますが、通常のウィンドウに対してwindow.close()を呼び出すと

ウィンドウは、表示中のWebページにより閉じられようとしています。このウィンドウを閉じますか?

のような確認ダイアログボックスが表示されてしまいます。このメッセージを表示せず、通常のウィンドウを閉じるには下記のようなスクリプトを書けば閉じる事ができます。

    function closeOwnerWindow() {
        var owner = window.open("", "_top");
        owner.opener = window;
        owner.close();
    }

実際に使う場面はURLを直接指定してログイン画面を開き、画面上のログインボタンを押下するとポップアップ(window.open)でシステムのメニュー画面等を表示する時です。通常はログイン画面が残ってしまい、ウィンドウが二つ開いた状態になってしまいますが、上記の方法を用いるとログイン画面を閉じて、システムのウィンドウのみ残す事ができます。ポップアップでシステム画面を開く際によくあるパターンがツールバーやアドレスバーを非表示にして、ウィンドウをフルサイズにする事です。なりすましの脆弱性などありますが、実際は画面のサイズを確保する時なんかによく使われるパターンですよね。実際に処理を記述する時は以下のような感じになります。

    function openSystemWindow() {
        window.open("システムのメニュー画面へのパス");
        closeOwnerWindow();
    }

最初にシステムの画面をwindow.openで開き、上記オーナーウィンドウを閉じるスクリプトを呼び出せばOKです。オーナーを閉じてしまうスクリプトの肝となるのが、openerを書き換えてしまう事です。window.openの第二引数でtargetを_topにしているのは、自分自身のウィンドウを子ウィンドウとし、さらにopenerをも自分自身とすることによって、window.close()によってウィンドウを閉じる事ができます。ちなみにIE限定っぽいです(未検証)