|
Webページ上でのマウスクリックやキー押下イベントを制御します。 *** HIDEventControl.js [#s954881f] - テキスト入力エレメント以外では、コンテキストメニューを非表示。 - マウスクリック制御のスケルトンを提供。(必要に応じて処理追記されたし) - ブラウザショートカットキーの無効化制御。 - 本体 : &ref(http://jomura.net/archive/2010/HIDEventControl.js); - 本体(min) : &ref(http://jomura.net/archive/2010/HIDEventControl.min.js); /////////////////////////////////////////////////////////// // // Human Interface Device Event Control // // Copyright 2009- TOKYO GAS CO.,LTD. All Rights Reserved. // // @author K.Jomura // @author $LastChangedBy$ // @since 2009.09.16 // @version 2010.04.02 enable to use on frame // // Human Interface Device Event Control // // @author K.Jomura ( kazuhiko@jomura.net http://jomura.net/ ) // @author $LastChangedBy$ // @since 2009.09.16 // @version 2010.08.13 lighten // 2010.04.02 enable to use on frame // 2010.03.12 Disabled [Space]Key // 2009.10.05 version 1 // /////////////////////////////////////////////////////////// /* * 必要に応じて本ファイルの内容をcommon.js等に取り込んでください。 */ /* * コンテキストメニュー制御スクリプト */ //bodyオブジェクトはload後でないと取得できないため、loadイベントでセットする addEvent(window, "load", set_oncontextmenu); function set_oncontextmenu() { var bodys = document.getElementsByTagName("body"); if (bodys.length != 1) { return; } var body = bodys[0]; if ('\v' == 'v') { body.oncontextmenu = enableContextMenu; // for IE } else { body.setAttribute("oncontextmenu", "return enableContextMenu();"); // forFirefox } } function enableContextMenu() { var obj = document.activeElement; // フォーカスが当たっていない場合は無効化 if (obj != null) { // TEXTAREAの場合は、標準動作 if (obj.tagName.toUpperCase() == 'TEXTAREA') { if (!obj.readOnly) { return true; } } // INPUTで、typeがTEXTかPASSWORDの場合は、標準動作 if (obj.tagName.toUpperCase() == 'INPUT' if (obj != null && obj.type != null) { // TEXTAREAもしくはINPUTでtypeがTEXTかPASSWORDの場合は、標準動作 if (obj.tagName.toUpperCase() == 'TEXTAREA' || (obj.tagName.toUpperCase() == 'INPUT' && (obj.type.toUpperCase() == 'TEXT' || obj.type.toUpperCase() == 'PASSWORD')) { || obj.type.toUpperCase() == 'PASSWORD'))) { if (!obj.readOnly) { return true; } } } return false; } /* * マウスクリック制御スクリプト */ /* // 画面でマウスがクリックされた時のイベントハンドラー addEvent(document, "mousedown", mouseHook); addEvent(document, "mouseup", mouseHook); function mouseHook(e) { var _event; if ('\v' == 'v') { _event = event; // for IE } else { _event = e; // for Firefox } // クリックされたタイミングでフォーカスされたエレメントの取得 var obj = document.activeElement; if (_event.button & 2) // 右クリック { // 無効化 // return disableMouseEvent(_event); } // ブラウザ標準の動作 return true; // マウスイベントを無効化する。 function disableMouseEvent(_event) { _event.cancelBubble = true; // イベントの通知を禁止 alert('右クリックメニューは使用できません。'); // 右クリックメニューを防止する為に必須 return false; // その他イベントを禁止 } } */ /* * キー制御スクリプト */ // bodyオブジェクトはload後でないと取得できないため、loadイベントでセットする addEvent(window, "load", set_onkeydown); function set_onkeydown() { if ('\v' == 'v') { addEvent(document.body, "keydown", keyHook); // for IE } else { document.onkeydown = keyHook; // for Firefox } } function keyHook(e) { var _event; if ('\v' == 'v') { _event = event; // for IE } else { _event = e; // for Firefox } // キーが押されたタイミングでフォーカスされたエレメントの取得 var obj = document.activeElement; // 以下、キー毎に処理を行う // Alt + F4 ,ESCについてはJavaScriptでの防止は不可。 // Ctrlキー if (_event.ctrlKey) { switch (_event.keyCode) { case 66: // Ctrl + B 標準動作:[お気に入りの整理] ダイアログ ボックを表示する。 case 68: // Ctrl + D 標準動作:現在のページを[お気に入り]に追加する case 69: // Ctrl + E 標準動作:検索バーを表示する。 case 72: // Ctrl + H 標準動作:履歴バーを表示する。 case 73: // Ctrl + I 標準動作:お気に入りバーを表示する。 case 76: // Ctrl + L 標準動作:新しくファイルを開く。 case 78: // Ctrl + N 標準動作:新しいウィンドウを表示する。 case 79: // Ctrl + O 標準動作:新しくファイルを開く。 case 82: // Ctrl + R 標準動作:現在の Web ページを更新する。 case 83: // Ctrl + S 標準動作:現在のページを保存する。※未反応だが念の為に case 87: // Ctrl + W 標準動作:現在のウィンドウを閉じる。 return disableKeyEvent(_event); } } // Altキー if (_event.altKey) { switch (_event.keyCode) { case 36: // Alt + Home 標準動作:ホーム ページに移動する。 case 37: // Alt + ← (左矢印) 標準動作:前のページに移動する。 case 39: // Alt + → (右矢印) 標準動作:次のページに移動する。 disableKeyEvent(_event); if ('\v' == 'v') { // IEはメッセージ表示をしないと無効化できない disableKeyEventAlert(); } return false; } } switch (_event.keyCode) { case 8: // BackSpaceキー // 標準動作:前のページに移動する。 // コントロールのタイプが取得できない場合にはアクションを起こさない if (obj != null && obj.type != null) { // TEXTAREAの場合は、標準動作 if (obj.tagName.toUpperCase() == 'TEXTAREA') { // TEXTAREAもしくはINPUTでtypeがTEXTかPASSWORDの場合は、標準動作 if (obj.tagName.toUpperCase() == 'TEXTAREA' || (obj.tagName.toUpperCase() == 'INPUT' && (obj.type.toUpperCase() == 'TEXT' || obj.type.toUpperCase() == 'PASSWORD'))) { if (!obj.readOnly) { return true; } } // INPUTで、typeがTEXTかPASSWORDの場合は、標準動作 if (obj.tagName.toUpperCase() == 'INPUT' && (obj.type.toUpperCase() == 'TEXT' || obj.type .toUpperCase() == 'PASSWORD')) { if (!obj.readOnly) { return true; } } } return disableKeyEvent(_event); break; case 32: // Spaceキー // 標準動作:様々 // コントロールのタイプが取得できない場合にはアクションを起こさない if (obj != null && obj.type != null) { // TEXTAREAの場合は、標準動作 if (obj.tagName.toUpperCase() == 'TEXTAREA') { if (!obj.readOnly) { return true; } } // INPUTで、typeがTEXTかPASSWORDの場合は、標準動作 if (obj.tagName.toUpperCase() == 'INPUT' // TEXTAREAもしくはINPUTでtypeがTEXT,PASSWORD,CHECKBOX,RADIOの // いずれかの場合は、標準動作 if (obj.tagName.toUpperCase() == 'TEXTAREA' || (obj.tagName.toUpperCase() == 'INPUT' && (obj.type.toUpperCase() == 'TEXT' || obj.type.toUpperCase() == 'PASSWORD' || obj.type.toUpperCase() == 'CHECKBOX' || obj.type.toUpperCase() == 'RADIO')) { || obj.type.toUpperCase() == 'RADIO'))) { if (!obj.readOnly) { return true; } } } return disableKeyEvent(_event); break; case 13: // Enterキー // 標準動作:様々 // Do Nothing break; case 93: // ContextMenuキー // 標準動作:コンテキストメニューを表示する。 // Do Nothing // body.oncontextmenuで制御するため、キー制御は不要。 break; // ファンクションキー等 // ヘルプ表示以外のすべてのファンクションキーを無効化 case 113: // F2 標準動作:なし case 114: // F3 標準動作:Googleツールバーの表示。 case 115: // F4 標準動作:以前入力したアドレスの一覧を表示する。 case 116: // F5 標準動作:(Ctrl + F5)現在のページを更新する。 case 117: // F6 標準動作:なし case 118: // F7 標準動作:なし case 119: // F8 標準動作:なし case 120: // F9 標準動作:なし case 121: // F10 標準動作:(Shift + F10)リンクのショートカット(右クリック)メニュを表示する。 case 122: // F11 標準動作:ブラウザ ウィンドウの全画面表示と通常表示を切替える。 case 123: // F12 標準動作:? case 124: // F13 標準動作:? case 125: // F14 標準動作:? case 126: // F15 標準動作:? case 127: // F16 標準動作:? case 166: // ThinkPadの「戻る」 ※効かない case 167: // ThinkPadの「進む」 ※効かない return disableKeyEvent(_event); } // ブラウザ標準の動作 return true; // キーイベントを無効化する。 function disableKeyEvent(_event) { if ('\v' == 'v') { _event.keyCode = -1; // キーコードを無効化 (Firefoxにはsetter無し=IE専用?) } _event.cancelBubble = true; // イベントの通知を禁止 _event.returnValue = false; return false; } // メッセージを表示してイベント処理実行を防止する。 function disableKeyEventAlert() { alert("このショートカットキーは使用できません。"); } } function addEvent(elem, eventType, fn) { if (elem.addEventListener) { // for W3C DOM elem.addEventListener(eventType, fn, false); } else if (elem.attachEvent) { // for IE elem.attachEvent('on' + eventType, fn); } else { elem['on' + eventType] = fn; } } - テスト用HTML : &ref(HIDEventControlTest.html);