none
ALT+F4を禁止したい RRS feed

  • 質問

  •  

    表題の通り、「ALT+F4」のウインドウクローズイベントを禁止したいのですが、

    Javascriptにて

     if( event.altKey == true ) {
      event.returnValue = false;

    ...抜粋

    }

     

    この様な感じのコードを記述するが、どうしてもALT+F4は禁止できません。

     

    セキュリティ上、ウインドウを強制終了できる「ALT+F4」は抑制できないのでしょうか

    ご教示いただきたく。

     

    仕様

    ie 6.0sp1

    asp.net2.0

    javascript

    C#

    2007年8月31日 10:56

回答

  •  marumusisan さんからの引用

    表題の通り、「ALT+F4」のウインドウクローズイベントを禁止したいのですが、

     

    それは Web ページの内側からできることの範疇を超えています.

    ついでに,Alt+F4 を禁止にするだけでは,ブラウザが勝手に閉じられることを防ぐには不十分です.

     

    多くのブラウザは,ブラウザ自体の動作に影響を与える拡張機能のインストールができるようになっていて,marumusisan さんのやろうとしていることはそのブラウザ拡張の範疇でしょう.

     

    ブラウザをアプリケーションコンテナに使いたいという要望があるのは,ブラウザ提供側自体よく把握しています.

    「ブラウザがあるタイミングで閉じられないようにできれば (サービスの提供側としては) 楽なのに」という要望に対し,そのように改造したブラウザを配布したり,拡張機能をインストールすることでそのようにブラウザの動作を上書きしたりということはおそらく可能です.

     

    実際,Internet Explorer 専用であった Windows Update は,(閉じる禁止の例ではないですが) ActiveX コントロールによってブラウザを拡張し,アップデート配布ツールに転用した例とも言えます. Vista でやめましたけど.

     

    しかし,単なる Web ページの提供を超えて,バイナリコンポーネントの提供まで手を出してしまうことには明らかなデメリットもあります.まず利用者のソフトウェア環境のバージョンを厳密に意識しなければなりませんし,拡張のアップデートの仕組みや,インストール権限の問題など,サポートは明らかに複雑になります.もちろん自分でその仕組みを作り上げるのは大変なので,最近なら ClickOnce のような仕組みにのっかる形でなんとか導入できるかな,というのがよくあるパターンでしょうか.

    不特定多数のユーザを相手に,こういったサポートコストと戦うのは大変なので,一般向けサイトで最近こういう手法は下火と.だから,実装は大変でもなんとかサービス側の工夫で対応しようということになるんですよね?

     

    今回は相手が IE 6.0 SP1 固定ということで,業務利用等の限られた状況にあって,利用者に使用環境を強制できるのかもしれませんが,そうであれば,バイナリモジュールを各端末にインストールすることで,ブラウザが閉じられることは一応防げるのではないかと思います.

    もちろん,そのモジュールに不具合があれば,全台のアップデートが必要になるなど,Web サービスのみで完結させるのに比べれて無視できない別のリスクが生まれます.

    ケースバイケースで執るべき手段を選ぶんじゃないでしょうかね.

    2007年9月1日 6:37

すべての返信

  • こんにちは、marumusisan さん。

     marumusisan さんからの引用

    セキュリティ上、ウインドウを強制終了できる「ALT+F4」は抑制できないのでしょうか

    ご教示いただきたく。


    本当にセキュリティを考えるのであれば、それをしても問題ない作りでなければなりません。
    そもそも、マウスで閉じた場合も同じことですから穴だらけだと思います。


    仮に JavaScript で防止できたとしても、ブラウザの設定によって JavaScript は自由に無効にできますよね。
    プロセスを強制終了してしまうこともできますよね。

    2007年8月31日 16:08
  •  marumusisan さんからの引用

    表題の通り、「ALT+F4」のウインドウクローズイベントを禁止したいのですが、

     

    それは Web ページの内側からできることの範疇を超えています.

    ついでに,Alt+F4 を禁止にするだけでは,ブラウザが勝手に閉じられることを防ぐには不十分です.

     

    多くのブラウザは,ブラウザ自体の動作に影響を与える拡張機能のインストールができるようになっていて,marumusisan さんのやろうとしていることはそのブラウザ拡張の範疇でしょう.

     

    ブラウザをアプリケーションコンテナに使いたいという要望があるのは,ブラウザ提供側自体よく把握しています.

    「ブラウザがあるタイミングで閉じられないようにできれば (サービスの提供側としては) 楽なのに」という要望に対し,そのように改造したブラウザを配布したり,拡張機能をインストールすることでそのようにブラウザの動作を上書きしたりということはおそらく可能です.

     

    実際,Internet Explorer 専用であった Windows Update は,(閉じる禁止の例ではないですが) ActiveX コントロールによってブラウザを拡張し,アップデート配布ツールに転用した例とも言えます. Vista でやめましたけど.

     

    しかし,単なる Web ページの提供を超えて,バイナリコンポーネントの提供まで手を出してしまうことには明らかなデメリットもあります.まず利用者のソフトウェア環境のバージョンを厳密に意識しなければなりませんし,拡張のアップデートの仕組みや,インストール権限の問題など,サポートは明らかに複雑になります.もちろん自分でその仕組みを作り上げるのは大変なので,最近なら ClickOnce のような仕組みにのっかる形でなんとか導入できるかな,というのがよくあるパターンでしょうか.

    不特定多数のユーザを相手に,こういったサポートコストと戦うのは大変なので,一般向けサイトで最近こういう手法は下火と.だから,実装は大変でもなんとかサービス側の工夫で対応しようということになるんですよね?

     

    今回は相手が IE 6.0 SP1 固定ということで,業務利用等の限られた状況にあって,利用者に使用環境を強制できるのかもしれませんが,そうであれば,バイナリモジュールを各端末にインストールすることで,ブラウザが閉じられることは一応防げるのではないかと思います.

    もちろん,そのモジュールに不具合があれば,全台のアップデートが必要になるなど,Web サービスのみで完結させるのに比べれて無視できない別のリスクが生まれます.

    ケースバイケースで執るべき手段を選ぶんじゃないでしょうかね.

    2007年9月1日 6:37
  • お世話になります。

     

    ご回答を頂きましてありがとうございます。

    個人的にも、愚問である事は知りつつスレッドをたててしまいました。

     

    なにか良い手法でWebアプリケーションを安定終了させる技術が現在はあるかと思いました。

     

    昔と一緒ですね。

     

    回答して頂いた方、ありがとうございます。

    2007年9月1日 13:33