ブロック内の function [JavaScript]
Firefox 45版で Syntax Error。46版以降ではエラーにならない。
(function () { "use strict"; { function a() // Firefox 45: Syntax Error { } } })();
IE7 - window.close() で閉じる [JavaScript]
Microsoft® Internet Explorer® 7 が出たので、無謀にも IE7 sp1 を待たずに導入してみた。
IE7のリリースノートによると、IE6での、window.opener
に何か入れて window.close()
で「このウィンドウを閉じますか?
」の警告メッセージ表示のダイアログを出さない方法は、IE7では機能しなくなったらしい。
ということで、昔、Netscape Communicator 4 の Navigator を "Close Window?
" の確認の表示を出さずに閉じる(ウィンドウ位置や設定が保存されないという意味で、Navigator を“落とす”という感じになる)のに使用した、
window.open('','_top').close();
をIE7で試してみた。
Netscape4 と同じく、IE7 でも「このウィンドウを閉じますか?
」の確認の表示がされずに閉じるようだが、IE6 では確認の表示がされるようなので、「window.opener
に何か入れる方法」を加えてみた。
(window.open('','_top').opener=top).close();
<button> 要素の onclick="…" 属性で実験してみる。
<button type="button" onclick="(window.open('','_top').opener=top).close();">ここをクリックすると閉じます</button>
Firefox® 2 は、Firefox 2 のエラーコンソールに「スクリプトはスクリプトによって開かれたウィンドウ以外を閉じることができません。」が記録されて閉じないが、IE6 と IE7 は、「このウィンドウを閉じますか?
」の確認のダイアログが出ずに閉じるようだ。
onclick="…"
に書くこともあるので、open('','_top')
では、単引用符('
)を使用している(フォントによっては二重引用符("
) に見えることもあるが、''
は単引用符を2個続けて書いている)。onclick=
で二重引用符で囲んで書く場合、onclick='(window.open("","_top").opener=top).close();'
や、文字実体参照を使用して、
onclick="(window.open("","_top").opener=top).close();"
というふうにも書ける。
(HTMLエンティティ " を使用する下の方法が正しいらしい。)- frameset&frame, iframe, object を使用したフレームを解除する目的で、window.open(…) の2番目の引数に
_top
を指定している(_top
は、フレームではない場合は_self
の動作になる)。_parent
はフレームの(framesetの入れ子 等の)作り方によっては確認のダイアログが出る。iframe はよく使われているが frameset&frame の使用は非推奨で減ってきているので、2番目の引数は、_parent
でも_self
でも良いという意見もある。1番目の引数が''
の場合は、'about:blank'
よりは、静かな動作になる。 - セキュリティソフトやポップアップ抑止ソフトの設定によっては、「
このウィンドウを閉じますか?
」の確認のダイアログが出ることがあるらしい。
(window.open('','_top').opener=top).close();
があちこちで採用されているようだ。window.open(…) の2番目の引数に指定するウィンドウの名前が、
(window.open('','_parent').opener=top).close();
や、
(window.open('','_self').opener=top).close();
(window.open('','_self').opener=window).close();
のような、_parent
や _self
も人気のようだ。
- IE8 ~ IE11 でも閉じるようだ。
Windows版の Safari® はページの遷移があると、
(window.open('','_self').opener=window).close();
でないと閉じないようだ(Mac版の Safari については未確認)。Safariの実装でKHTML系の仕様ではないらしい。他のKHTML系のブラウザではフレームは解除されるが閉じないこともある。
IE でフレーム構成のページの場合は閉じない。- Firefox 3 は Firefox 2 と同様に閉じない。
- Opera® は window.open(…) をタブで開く設定になっているとタブは閉じるがブラウザは終了しない。
上端にスクロールしてしまうページ [JavaScript]
小窓を開くリンクが多いページで、
<a href="#" onclick="javascript:hoge()">文言等</a> <!-- ↑ はhoge()で小窓を開く等する -->
クリックする度にページの上端(TOP)に移動してしまうことがある。
こーゆーページは、
<a href="#"
onclick="javascript:hoge();return false">文言等</a>
<!-- ↑ はhoge()で小窓を開く等する -->
という風に return false
をつけてほしかったりする。
ついでに、
<a href="javascript:void(0)"
onclick="javascript:hoge();return false">文言等</a>
<!-- ↑ はhoge()で小窓を開く等する -->
という風に javascript:void(0)
とすると、JavaScriptをオフにしている場合でもページ上端(TOP)に行かないので良いかもしれない。(これは“好みの問題”かも…)
target
を付けるのがアレでなければ、
<a href="honyara.html" target="komado" onclick="javascript:hoge()">文言等</a> <!-- ↑ はhoge()で window.open('','komado','サイズ指定等') で小窓を開く等する -->
という風に、onclick で小窓を作成しておいて、あとは普通(?)にtarget
で文書を表示する手もあるかもしれない。JavaScriptが無効の状態でも、何とか表示される。