Javascriptでキー同時入力の検出をする(Printscreenキーは拒否できない)

Sponsored Link


動作概要


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);
//}
Sponsored Link

最新記事はトップページで!

京都発・地方が盛り上がるグルメや観光に撮影ロケ地の話題を提供!


購読するならRSSをご利用ください!

RSSはこちらをご利用ください。


マスコミ各社様の記事使用規約についてはこちらをご覧ください。

当ブログでは掲示板やSNSなど他メディアでURLや記事を紹介することはございませんので、掲示板などで記事を紹介されていても一切無関係です。誤解なきようお願いいたします。
当ブログで転載しているTweetはTwitter社の規約(2013/10)に準じた形式(API利用)によって許可された範囲で行われています。また、Tweet内容の所有権はTwitter社の規約によりTweet元のアカウント所有者にあります。そのため、当ブログでその所有権を主張するものではありません。Tweet内容については責任は負いませんので予めご了承ください。