打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
挙動が大事! JavaScriptでWindow.closeする時のブラウザ別対応まとめ

社内用のWebシステムにこれまで設置してなかった「閉じる」ボタンを設置することになった際、少々ブラウザ問題でつまずいた点があった。ググっても最近のwindow.close周辺の情報を見つけることができなかったのでまとめておく。


photo credit: flod via photopin cc

サマリー

1.まず、閉じるボタンの必要性
2.IE(シェア:57.8%)の場合
3.Firefox(シェア:18.9%)の場合
4.Chrome(シェア:16.0%)の場合
5.safari(シェア:5.6%)の場合
6.まとめ

※ちなみにバージョンはie10、firefox26.0、chrome 31、safari 5.1.7です。


1.まず、閉じるボタンの必要性

ブラウザには標準で×(閉じる)ボタンがついているのに、どうして閉じるボタンを自作する必要が生じるのか?

一般的には、システム終了のタイミングで何らかの処理を走らせたい場合などが考えられる。

例えばログイン機能を持つWebシステムを複数人が同一PCで使用するような場合、ブラウザの×ボタンで閉じただけではCookieにユーザー情報が残ってしまったりするため、ブラウザの×ボタンを押されないような仕組みにするか、押された場合でもきちんと直前にログオフするような仕組みを設けるのが親切な設計である。

ただし、今回の場合はユーザー情報保持にCookieではなくセッションを使っているため、このような背景は関係ない(セッションだと閉じると同時にクリアされる)。単純にシニア層も使用する頻度が高いシステムだったため、ブラウザ上部に小さく存在する「×」ボタンにマウスフォーカスするのは億劫なのではないかという親切心から、大きめの閉じるボタンを設置したほうがいいのではという流れ。ユーザインターフェース面から設置することになったという珍しいパターンである。





2.IE(シェア:57.8%)

いまだに大きなシェアを保持するIE(2013年8月時点でIE10は57.8%。ソースはここ。ちなみに当社内での使用比率は90%)を中心に考える。

まず、閉じるためのJavascriptを単純に下記のようにする。

onclick='window.close()'

きちんと閉じてくれた。

但し、以下のような確認ダイアログが出るため、ユーザはクリック操作が一つ増えてしまう。

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

そこで以下のようにする。

onclick='window.open('about:blank','_self').close()'

ワンクリックでキレイに閉じてくれた。


ieに対しては上記いずれの方法でも対応できたが、他のブラウザではどうか?
ieにはこれまで痛い目に合わされてきたので最低ランクに位置付けてはいるが、ieでできたからといってたかをくくってはいけない。一通り試してみると、少し意外な結果に...。






3.Firefox(シェア:18.9%)

onclick='window.close()'

なんと閉じない。
但し、これはFirefoxデフォルトのセキュリティ設定によって閉じないようにしているだけ。config設定を修正するとwindow.closeはふつうに使用できる。Firefoxでwindow.closeが使えない問題は長年にわたって議論されてきた問題らしい。

urlのところに「about:config」と入力し、「細心の注意を払って使用する」をクリック。

検索ボックスに「close」と入力して、close関連の設定のみ抽出し、「dom.allow_scripts_to_close_window」をダブルクリックで有効にする。


ちなみにこのconfig設定なしに下記も実行してみる。

onclick='window.open('about:blank','_self').close()'

空白タブが残るという気持ち悪い結果に。
上記config設定を行えばキレイに閉じる。







4.Chrome(シェア:16.0%)

onclick='window.close()'

閉じない。

onclick='window.open('about:blank','_self').close()'

閉じる。

Chromeの場合、逆にワンクリックで閉じるのを防ぐために「Window Close Protector」というアドオンが存在する模様。





5.safari(シェア:5.6%)

onclick='window.close()'

閉じない。

onclick='window.open('about:blank','_self').close()'

閉じる。





6.まとめ

IE 10 firefox 26.0 chrome 31 safari 5.1.7
window.close()のみ ×
config設定で○
× ×
window.open('about:blank','_self').close() △タブが残る
config設定で○


意外にもfirefoxに難ありという結果に。
このあたりの話がググってもあまり出てこないのは(露出が少ないだけ?)webサービスは個人向けという大前提のため、サービス提供側はcookieにはユーザー情報を残したいという考えがあり(当たり前だけど)、cookieを削除したい人はブラウザの設定でやってねという前提があるからか。

あわせて読みたい

jQuery UI を無駄なく使いこなすために必要な知識まとめ(各ファイルの役割など) - TechNote

jQueryUIは、インタラクティブなWebサイトを開発するために使用されるjQueryベースのUIライブラリです。このため、多くのサイトで「簡単」「手軽」など...

システム管理者でなくても知っとくべき! Windowsサーバ/クライアントの時刻同期設定まとめ - TechNote

コンピュータの内臓時計はズレやすいため、「時刻同期」について検討することはとても重要なことと思われますが、その重要性はあまり認識されていない気がします。私も先日...

BootstrapにぴったりのWebアイコンフォント FontAwesome 4.0.0 が公開されていた件 - TechNote

しばらくニュースをチェックできずにいて何気なくFontAwesomeのサイトを覗いてみたら、FontAw...



JavaScript 第6版

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
js关闭窗口
window.open打开子窗口后关闭父窗口实现
转载 JS关闭窗口或JS关闭页面的几种代码
window.close 关闭提示窗口 通用
当关闭子窗口时刷新父窗口 ,窗口打开总最大化--程序设计,软件开发,汇编,网页设计,VB,C,C ,VC,C#,.net,Java,Delphi,Powerbuilder,UML,photoshop
ASP.NET(C#)不提示直接关闭当前页面
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服