ガレコレ [Garage Collection]
2018年4月23日(月)
[JavaScript] window.close(); #HTML5&CSS3&JavaScript
 ウインドウを閉じる命令は下記の通り。

--
window.close();
--

 しかし、閉じれるウインドウは、親ウインドウから新しく開かれた子ウインドウのみである。なので、自身に白紙を開いてから閉じるという有名なハック(不正プログラム)がある。

--
window.open("about:blank","_self").close();
--

 ガレコレのプログラムにも使っているのだが、ブラウザによっては命令が無視され、ウインドウが閉じなくなっている。_selfでは、新しいウインドウで開いたと認識しないんだな。

--
○Microsoft Edge
○IE11
○Safari
×Google Chrome
×Firefox
×Opera
--

 エラー処理で分岐できるだろうと思っていたら、error!とアラートが表示されなかった。window.close()は実行されないがエラーではないということである。

--
window.onload = function(){
  try{
    $timer = setTimeout("window.close()",3000);
  }catch($error){
    alert("error!");
  }finally{
    $timer = setTimeout("window.open('about:blank','_self')",3000);
  }
}
--

 まあ、セキュリティ上、JavaScriptで勝手にウインドウを閉じれない仕様に変化してきている訳だ。それでも抜け道はあるかもと試してみたが、親ウインドウと子ウインドウの関係は崩れないようで、子ウインドウから親ウインドウは閉じれず、実験は失敗。

 それよりも、<iframe></iframe>を非表示にして、プログラムを記述したファイルを流し込む方法があり、ガレコレのプログラムにも利用している。こっちの方がよっぽどセキュリティホールなのだが、これが出来ないとなると、裏方のプログラムがすべておじゃんになるので、あまり騒がないようにしている。

[検証プログラム]
・下記リンクをクリックした場合、ウインドウが閉じる。
・下記リンクをコピーして、アドレスに張り付けて開いた場合は、ブラウザによって、ウインドウが閉じない。
http://neconote.jp/prg/logout.html
 
お問い合わせ


by Network Communication Note