動作概要
Javascriptによるキーの同時入力を検出するスクリプトです。以下は「F12」キーを無効化する例とブラウザの「ページ保存」をするショートカットキー入力とその他Chromeでの操作を無効化する例です。
スクリプト
// キーボード操作無効化 // F12[123] // Printscreen[44] = onkeyupでしか取得できない(return falseでは効かない) // Ctrl[17]+U[85] = Chrome ソース表示 // Ctrl[17]+S[83] = Chrome &IE ページ保存 // Ctrl[17]+C[67] = Copy // Shift[16]+I[73] = Chrome デベロッパーツール(F12相当) // Shift[16]+J[74] = Chrome Javascriptコンソール(F12相当) // var isCtrl = false; var isShift = false; document.onkeyup=function(e) { if(e.which == 16) isShift=false; if(e.which == 17) isCtrl=false; } document.onkeydown=function(e) { if(e.which == 123) return false; if(e.which == 16) isShift=true; if(e.which == 17) isCtrl=true; if((e.which == 85) || (e.which == 83) && isCtrl == true) { return false; } if((e.which == 73) || (e.which == 74) && isShift == true) { return false; } }
まず、10~18行目です。
ここで、「Ctrl」と「Shift」が押されていない状態を検出し(正確には押されていても話されたか検出)、それぞれの変数に結果(false)を代入しています。これがないと、一度押されたら、変数上はずっと押されてたことになってしまいます。
次に、実際のキー検出が20~36行までです。
21行目で、「F12」キー(123)が押されたら「false」を返して無効化しています。これで、「F12」キーが無効になりますが、これは同時入力は無関係です。
同時入力を検出しているのは、23行以降で、24~27行目で、「Ctrl」と「Shift」が押されていることを検出して、それぞれの変数に結果(true)を代入しています。10~18行目とは真逆の結果を変数に代入しています。
そのうえで、27行目で「U」キー(85)もしくは「S」キー(83)が押された時点で、「Ctrl」キーが押されている(いた)かを&&(and)でチェックするという方法です。
31行目も同じ要領で「Shift」キーが押されている(いた)かをチェックしつつチェックしています。
これで、キーの同時入力をチェックできる仕組みになっています。
Printscreenキーを拒否することはできません
方法があるなら知りたいのですが、色々と試してはみたものの、実現できていません。
Printscreenキーは本来「44」というコードなのですが、onkeyupでしか取得できません。(参考)
そして、onkeyupで取得しても「return false」ではスクリーンショットを止めることはできません。
なぜなら、「return false」が機能する前にスクリーンショットが撮られているからです。(スクリーンショットがonkeydownの時点で機能しているということなのでしょう)
また、以下のようなJavascriptでクリップボードを瞬時にクリアしていくスクリプトが紹介されていることもあるのですが、Chromeなどでは動作しませんので、実質的に「Printscreen」を拒否することは難しいようです。
// PrintScreen禁止(Chromeでは使えない) // 実行は別途処理あり //================================================== //function noClip() { //setInterval("window.clipboardData.clearData('Image')", 1); //}
最新記事はトップページで!
京都発・地方が盛り上がるグルメや観光に撮影ロケ地の話題を提供!