Webページ上でのマウスクリックやキー押下イベントを制御します。
HIDEventControl.js †
- テキスト入力エレメント以外では、コンテキストメニューを非表示。
- マウスクリック制御のスケルトンを提供。(必要に応じて処理追記されたし)
- ブラウザショートカットキーの無効化制御。
- 本体 : HIDEventControl.js
- 本体(min) : HIDEventControl.min.js
///////////////////////////////////////////////////////////
//
// 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 && 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'))) {
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もしくは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;
}
}
}
return disableKeyEvent(_event);
break;
case 32:
// Spaceキー
// 標準動作:様々
// コントロールのタイプが取得できない場合にはアクションを起こさない
if (obj != null && obj.type != null) {
// INPUTで、typeがTEXTかPASSWORDの場合は、標準動作
// 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'))) {
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;
}
}