C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: Vista/IE CTRL+F4 / ALT+F4 について


(過去ログ 40 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■21104 / inTopicNo.1)  Vista/IE CTRL+F4 / ALT+F4 について
  
□投稿者/ ま (60回)-(2008/06/25(Wed) 01:05:03)

分類:[HTML/CSS] 

2008/06/25(Wed) 10:05:39 編集(投稿者)
まずだまされたと思って以下のコードをコピペ実行してみて下さい。
<script>
document.onkeydown = function() {
	var flag = event.ctrlKey || event.altKey;
	if (flag) {
		if (event.keyCode == 115) {
			event.returnValue = false;
			event.cancelBubble = true;
			event.keyCode = 37;
			return false;
		}
	}
}
</script>
<body>
<p> CTRL+F4 か ALT+F4 押せ</p>
</body>

--------------------------------------------------------------------------------
普通に強制終了しましたか?

次に、
keyCode = 37; //37 は左矢印キー
又は
keyCode = 39; //39 は右矢印キー

でリロードしてみると、あら不思議。
強制終了がブロックできていますね。
Vistaに限らず、XP-SP2でも同様です。

で、質問ですが、keyCode=86 とか、keyCode=112 とか、海外のサイトを満遍なく調べて
何かを設定することで 強制終了をキャンセル出来るらしいのですが、それらは全てガセ
ネタでした。

keyCode=37 と 39 は、自分のネタでは在りません。

知っている方、根拠と理屈を教えて下さい。
おそらくWindowsキー入力のコアが絡むかと勝手な想像を膨らませています。

このコードを書いた方はもう中国へ帰って仕舞いまして連絡取れません。

宜しくお願いします。

WindowsIE で業務システム構築中の貴方、これで強制終了もブロックできて万々歳ですね・・・・

もしかして、既知の情報だったりします??少なくとも日本語ページでは検索ヒットしません
でした・・・

#訂正:if (event.keyCode == 115) { //F4
#これ入れるの忘れていました;;

引用返信 編集キー/
■21105 / inTopicNo.2)  Re[1]: Vista/IE CTRL+F4 / ALT+F4 について
□投稿者/ ネタ好き (488回)-(2008/06/25(Wed) 09:16:47)
No21104 (ま さん) に返信
>var flag = event.ctrlKey || event.altKey;
> if (flag) {
> event.returnValue = false;
> event.cancelBubble = true;
> event.keyCode = 0;
> return false;
> }
JavaScriptのeventオブジェクトはその名の通りイベントを処理するためのものです。
それで、cancelBubbleは親オブジェクトにイベントを通知するか否かを表しますので、
親オブジェクトであるIEにイベントを通知しないということを意味します。
イベントが通知されなければ「なかったことにされます」それがトリックです。


引用返信 編集キー/
■21108 / inTopicNo.3)  Re[2]: Vista/IE CTRL+F4 / ALT+F4 について
□投稿者/ ま (61回)-(2008/06/25(Wed) 10:32:13)
2008/06/25(Wed) 10:35:34 編集(投稿者)
No21105 (ネタ好き さん) に返信
> JavaScriptのeventオブジェクトはその名の通りイベントを処理するためのものです。
> それで、cancelBubbleは親オブジェクトにイベントを通知するか否かを表しますので、
> 親オブジェクトであるIEにイベントを通知しないということを意味します。
> イベントが通知されなければ「なかったことにされます」それがトリックです。

イベント伝播のとこコメントしました。
当該イベントに対して、return false するとイベントそのものがキャンセルできます。
cancelBubble すると、そのイベントの上位オブジェクトに対してイベント通知がキャンセル
されます。では、keyCode=37 or 39 以外で、return false してもそのイベントがキャンセル
されないのは何故なんでしょうか?というところで悩んでいます。

ALT+F4 (Vista では CTRL+F4 も強制終了の対象コマンド)

<script>
document.onkeydown = function() {
	var flag = event.ctrlKey || event.altKey;
	if (flag) {
		if (event.keyCode == 115) {
//			event.returnValue = false;
//			event.cancelBubble = true;
			event.keyCode = 37;//39;
			return false;
		}
	}
}
</script>
<body>
<p> CTRL+F4 か ALT+F4 押せ</p>
</body>

#37は、左矢印(history.back() と等価)
#39は、右矢印(history.forward() と等価)

引用返信 編集キー/
■21113 / inTopicNo.4)  Re[3]: Vista/IE CTRL+F4 / ALT+F4 について
□投稿者/ ネタ好き (489回)-(2008/06/25(Wed) 11:16:10)
No21108 (ま さん) に返信
>では、keyCode=37 or 39 以外で、return false してもそのイベントがキャンセル
>されないのは何故なんでしょうか?というところで悩んでいます。

IEの内部を見たわけではないので推測になりますが、event.cancelBubble = false;がデフォルト値で、
上部のオブジェクトがそのような処理をしているのだと思います。
おそらく落ちない事を意識して作られているのでしょう。
引用返信 編集キー/
■21161 / inTopicNo.5)  Re[4]: Vista/IE CTRL+F4 / ALT+F4 について
□投稿者/ ま (62回)-(2008/06/25(Wed) 22:51:10)
No21113 (ネタ好き さん) に返信
> IEの内部を見たわけではないので推測になりますが、event.cancelBubble = false;がデフォルト値で、
> 上部のオブジェクトがそのような処理をしているのだと思います。
> おそらく落ちない事を意識して作られているのでしょう。

むーん、英語ページだけじゃなくてもう少し範囲を広げて検索してみます。
なぞのポイントは、なぜ keyCode=37 か keyCode=39 じゃないとALT+F4
をキャンセルできないのか、です。

ありがとうございました。


解決済み
引用返信 編集キー/
■21162 / inTopicNo.6)  Re[5]: Vista/IE CTRL+F4 / ALT+F4 について
□投稿者/ ま (63回)-(2008/06/25(Wed) 23:37:58)
2008/06/26(Thu) 00:10:22 編集(投稿者)
No21161 (ま さん) に返信


http://www.microsoft.com/japan/enable/products/keyboard/ie6.mspx
IEショートカットキー一覧からページ遷移に関連するものだけをピックアップすると・・・
ALT+→(HISTORY FORWARD)   39      OK
ALT+←(HISTORY BACK)      37      OK
ALT+HOME(HOMEPAGE)        36      NG
ALT+END(EXIT)             35      NG
ALT+F5(RELOAD)            116     条件付き(alert でメッセージ表示後でリロードするが閉じない)

モードレスダイアログを出してALT+F4 自体をキャンセルするパターン。
<script>
document.onkeydown = function() {
	if ((window.event.altKey)&&(window.event.keyCode==115))             //屏蔽Alt+F4 
	{
		window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px"); 
		return false; 
	}

}
</script>

http://www.028link.com/cattle13/
むーん、中国語・・・わからんが、そもそもkeyCode=37 考えた奴が中国人だしなぁ。。。。
そもそもなんでダイアログ開いただけでキャンセル出来るのかなぞだらけだ。。。

ALT+F5 のパターン
<script>

document.onkeydown = function() {
    if ((window.event.altKey)&&(window.event.keyCode==115))
    {
         alert("ALT+F4 Cancel !!");
         event.keyCode = 116; //F5
         return false;
    }
}
</script>

でもリロードするのはまずいなぁ。。。

追加:
http://ubuntuforums.org/showthread.php?t=62214
http://www.developerfusion.co.uk/forums/t/49426/

むーん、とりあえず、イタリア語・スペイン語・ポルトガル語らしきページも漁ってみたけど
収穫無し。
keyCode に何か入れたらキャンセルできるってとこまで分かってて、たまたま keyCode=116 で
キャンセルする書き込み見つけて、115,114,113,... って全部やってみたら 39 と 37 で!!
だったのかも。。。
まぁ、いいや。
情報源無さそうなのでこれにてお終いにします。


解決済み
引用返信 編集キー/
■21163 / inTopicNo.7)  Re[6]: Vista/IE CTRL+F4 / ALT+F4 について
□投稿者/ ネタ好き (494回)-(2008/06/26(Thu) 07:30:32)
No21162 (ま さん) に返信
> IEショートカットキー一覧からページ遷移に関連するものだけをピックアップすると・・・
> ALT+→(HISTORY FORWARD) 39 OK
> ALT+←(HISTORY BACK) 37 OK
>

矢印系はIEのショートカットになっているから隙が出来たと思います。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -