ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptキーイベント(全ブラウザ対応)_JavaScriptスキル

JavaScriptキーイベント(全ブラウザ対応)_JavaScriptスキル

WBOY
WBOYオリジナル
2016-05-16 17:08:131094ブラウズ

パート 1: ブラウザーのキーイベント

js を使用してキーロギングを実装するには、ブラウザの 3 つの主要なイベント タイプ、つまり keydown、keypress、および keyup に注意する必要があります。これらはそれぞれ、3 つのイベント ハンドル onkeydown、onkeypress、onkeyup に対応します。一般的なキー押下では、キーダウン、キー押下、キーが放されたときのキーアップの順に 3 つのイベントすべてが生成されます。

これら 3 つのイベント タイプのうち、キーダウンとキーアップは比較的低レベルですが、キー押下は比較的高度です。ここでのいわゆる高度とは、ユーザーがシフト 1 を押すと、キープレスはキー イベントを解析して印刷可能な「!」文字を返すのに対し、キーダウンとキーアップはシフト 1 イベントのみを記録することを意味します。 [1]

ただし、キー押下は、F1 ~ F12、Backspace、Enter、Escape、PageUP、PageDown、矢印方向などの印刷可能な一部の文字に対してのみ有効です。キー押下イベントは生成されませんが、生成される可能性があります。キーダウンイベントとキーアップイベントが生成されます。ただし、FireFox では、ファンクション キーはキー押下イベントを生成できます。

keydown、keypress、keyup イベント ハンドラーに渡されるイベント オブジェクトには、いくつかの共通のプロパティがあります。 Alt、Ctrl、または Shift をキーと一緒に押すと、これはイベントの altKey、ctrlKey、shiftKey プロパティによって表されます。これらのプロパティは FireFox と IE に共通です。

パート 2: 互換性のあるブラウザ

ブラウザに関係するすべての JS では、ブラウザの互換性の問題を考慮する必要があります。
現在一般的に使用されているブラウザは主に IE と Mozilla をベースとしています。 Maxthon は IE カーネルに基づいていますが、FireFox と Opera は Mozilla カーネルに基づいています。

2.1 イベントの初期化

最初に知っておく必要があるのは、イベントを初期化する方法です。基本的なステートメントは次のとおりです。

関数 keyDown(){}
document.onkeydown = keyDown;

ブラウザがこのステートメントを読み取ると、キーボードのどのキーが押されても、KeyDown() 関数が呼び出されます。

2.2 FireFoxとOperaの実装方法

FireFox や Opera などのプログラムは IE より実装が面倒なので、ここで最初に説明します。

keyDown() 関数には隠し変数があります。通常、この変数を表すには文字「e」を使用します。

ファンクションキー下(e)

変数 e はキーストローク イベントを表します。どのキーが押されたかを確認するには、

属性を使用します。

e.どれ

e.これはキーのインデックス値を与えます。インデックス値をキーの英数字値に変換するには、次のように静的関数 String.fromCharCode() を使用する必要があります。

String.fromCharCode(e.that)

上記のステートメントをまとめると、FireFox でどのキーが押されたかを取得できます:


function keyDown(e) {
var keycode = e.that;
var realkey = String.fromCharCode(e.that);
warning( "キーコード: " keycode " Character: " realkey);
}
document.onkeydown = keyDown


2.3 IE
の実装方法 IE プログラムには e 変数は必要ありません。e.that の代わりに window.event.keyCode を使用します。キー インデックス値を実際のキー値に変換する方法は String.fromCharCode(event.keyCode) と似ています。プログラムは次のとおりです。


function keyDown( ) {
var keycode =event.keyCode ;
var realkey = String.fromCharCode(event.keyCode)
alter("Keycode: " keycode "character: " realkey); > document.onkeydown = keyDown



2.4 ブラウザの種類を決定する

さまざまなブラウザで主要なイベント オブジェクトを取得する方法を学習しました。次に、ブラウザの種類を決定する必要があります。いくつかは理解しやすいものであり、いくつかは非常に賢いものです。最初に一般的なものについて説明します。メソッド: navigator オブジェクトの appName 属性を使用します。もちろん、userAgent 属性も使用できます。ここでは、IE と Maxthon の appName は「Microsoft Internet Explorer」です。 FireFox と Opera の違いは「Netscape」なので、比較的単純な機能のコードは次のとおりです。


コードをコピーします

は次のとおりです:

function keyUp(e) {
if(navigator.appName == "Microsoft Internet Explorer")
{
var keycode = events.keyCode var realkey = String. .keyCode);
}else
var keycode = e.that; "Keycode: " keycode " Character: " realkey);
document.onkeyup = keyUp;
より簡単な方法は [2]:




コードをコピー

コードは次のとおりです:
document.onkeyup = keyUp;


簡単に説明しましょう:
まず、e=e||event; このコードはブラウザのイベント オブジェクトの取得と互換性を持たせるためのものです。 js でのこのコードの意味は、隠し変数 e が FireFox または Opera に存在する場合、e||event は e を返します。隠し変数 e が IE に存在しない場合、event が返されます。
2 番目に、currKey=e.keyCode||e.that||e.charCode; この文は、ブラウザのキー イベント オブジェクトのキー コード属性と互換性があります (詳細については、パート 3 を参照)。 IE には keyCode 属性しかありませんが、FireFox には what 属性と charCode 属性があり、Opera には keyCode と what 属性があります。

上記のコードはブラウザとのみ互換性があり、keyup イベント オブジェクトを取得し、キー コードとキー文字をポップアップするだけですが、キーを押すと文字キーがすべて大文字になるという問題が発生します。 Shift キーを押すと表示される文字が非常に奇妙になるため、コードを最適化する必要があります。


パート 3: コードの実装と最適化

3.1 キーコードとキーイベントの文字コード

キーコードやキーイベントの文字コードはブラウザ間での移植性に欠けており、ブラウザやケースイベントによってキーコードや文字コードの格納方法が異なります。IEでは1つしかありません。 keyCode 属性であり、その解釈はイベント タイプによって異なります。 keydown の場合、keyCode にはキー コードが格納されます。keypress イベントの場合、keyCode には文字コードが格納されます。 IE には what 属性と charCode 属性がないため、that 属性と charCode 属性は常に未定義です。

FireFox の keyCode は常に 0 です。keydown/keyup のときは charCode=0 となり、これがキーコードです。イベントキープレスが発生すると、CHARCODEとCHARCODEの値が同じとなり、文字コードが格納されます。

Operaではkeydown/keyupイベントではキーコードを格納し、キー押下時には文字コードを格納しますが、charCodeは定義されていません。常に未定義です。

3.2 キーダウン/キーアップまたはキープレスを使用する必要があります

最初の部分では、keydown/keyup と keypress の違いを紹介しました。一般的なルールとして、keydown イベントはファンクション キーに最も役立ち、keypress イベントは印刷可能なキーに最も役立ちます [3]。

キーボードのログは主に印刷可能な文字と一部のファンクション キーに対して行われるため、キープレスが第一の選択肢となります。ただし、最初の部分で述べたように、IE のキープレスはファンクション キーをサポートしていないため、キーダウン/キーアップ イベントを使用して補完する必要があります。それ。

3.3 コード実装

一般的な考え方は、keypress イベント オブジェクトを使用してキー文字を取得し、keydown イベントを使用して Enter、Backspace などのファンクション文字を取得することです。

コードの実装は次のとおりです


コードをコピーします

コードは次のとおりです:


!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

js キーストローク ロギング< TITLE> <br><META NAME="ジェネレーター" CONTENT="EditPlus"> <br><META NAME="著者" CONTENT="Yu Shangren"> CONTENT="js キーストローク ログ"> <br><META NAME="説明" CONTENT="js キーストローク ログ"> <br><BODY> type="text/javascript"> <br>var keystring = "";//レコードキー文字列<br>function $(s){return document.getElementById(s)?document.getElementById(s) :s;} <br>関数 keypress(e) <br>{ <br> var currKey=0,CapsLock=0,e=e||event; <br> currKey=e.keyCode||e.what|| e.charCode; <br> CapsLock=currKey>=65&&currKey switch(currKey) <br> { <br> // バックスペース、タブ、キャリッジ リターン、スペース、矢印キー、削除はブロックされます Key<br> の場合8: ケース 9: ケース 13: ケース 32: ケース 37: ケース 38: ケース 40: ケース 46: keyName = "";break; <br> デフォルト:keyName = String.fromCharCode(KeycurrKey); 🎜> } <br> keystring = keyName; <br>} <br>関数 keydown(e) <br> var e=e||event; <br> var currKey=e |どの | 🎜> ケース 8: keyName = "[Backspace]" ブレーク <br> ケース 13: keyName = "[Enter];ブレーク; <br> ケース 32:keyName = "[スペース]"; ブレーク <br> ケース 34:キー名 = "[ページダウン]"; <br> case 35:keyName = "[終了]"; <br> case 36:keyName = "[ホーム]"; <br> case 37:keyName = "[矢印キー]"; <br> case 38:keyName = "[方向キーは上]"; <br> case 39:keyName = "[方向キーは右]"; <br> case 40:keyName = "[方向キーは下]; "; ブレーク; <br> case 46:keyName = "[削除]"; ブレーク; <br> default:keyName = ""; ブレーク; <br> } <br> keystring = keyName; "content").innerHTML= keystring; <br>} <br>function keyup(e) <br>{ <br> $("content").innerHTML=keystring; <br>document.onkeypress= keypress; onkeydown =keydown; <br></script> <br><input type= "button" value="クリアRecord" onclick="$('content').innerHTML = '';keystring = '';"/> <br><br/> キーボードの応答を表示するには、任意のキーを押してください。キーの値: <span id="content"></span> <br></BODY> <br><br><br>コード分析: <br>$ (): dom ベースの取得ID <br><br>keypress(e): ファンクション キーは keydown を使用して取得する必要があるため、keypress でブロックされます。 <br><br>keydown(e): 主にファンクションキーの取得を実現します。 <br><br>keyup(e): インターセプトされた文字列を表示します。 <br> </div></a></span></div></div><div class="nphpQianMsg"><div class="clear"></div></div><div class="nphpQianSheng"><span>声明:</span><div>この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。</div></div></div><div class="nphpSytBox"><span>前の記事:<a class="dBlack" title="JavaScriptの通常関数とアロー関数の違いと使い方を詳しく解説" href="https://m.php.cn/ja/faq/14811.html">JavaScriptの通常関数とアロー関数の違いと使い方を詳しく解説</a></span><span>次の記事:<a class="dBlack" title="JavaScriptの通常関数とアロー関数の違いと使い方を詳しく解説" href="https://m.php.cn/ja/faq/14813.html">JavaScriptの通常関数とアロー関数の違いと使い方を詳しく解説</a></span></div><div class="nphpSytBox2"><div class="nphpZbktTitle"><h2>関連記事</h2><em><a href="https://m.php.cn/ja/article.html" class="bBlack"><i>続きを見る</i><b></b></a></em><div class="clear"></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="fluid" data-ad-layout-key="-6t+ed+2i-1n-4w" data-ad-client="ca-pub-5902227090019525" data-ad-slot="8966999616"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><ul class="nphpXgwzList"><li><b></b><a href="https://m.php.cn/ja/faq/1609.html" title="Bootstrap リスト グループ コンポーネントの詳細な分析" class="aBlack">Bootstrap リスト グループ コンポーネントの詳細な分析</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/1640.html" title="JavaScript関数のカリー化の詳細説明" class="aBlack">JavaScript関数のカリー化の詳細説明</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/1949.html" title="JS パスワードの生成と強度検出の完全な例 (デモ ソース コードのダウンロード付き)" class="aBlack">JS パスワードの生成と強度検出の完全な例 (デモ ソース コードのダウンロード付き)</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/2248.html" title="Angularjs は WeChat UI (weui) を統合します" class="aBlack">Angularjs は WeChat UI (weui) を統合します</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ja/faq/2351.html" title="JavaScript を使用して繁体字中国語と簡体字中国語をすばやく切り替える方法と、簡体字中国語と繁体字中国語の切り替えをサポートする Web サイトのトリック_javascript スキル" class="aBlack">JavaScript を使用して繁体字中国語と簡体字中国語をすばやく切り替える方法と、簡体字中国語と繁体字中国語の切り替えをサポートする Web サイトのトリック_javascript スキル</a><div class="clear"></div></li></ul></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5902227090019525" data-ad-slot="5027754603"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><footer><div class="footer"><div class="footertop"><img src="/static/imghwm/logo.png" alt=""><p>福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!</p></div><div class="footermid"><a href="https://m.php.cn/ja/about/us.html">私たちについて</a><a href="https://m.php.cn/ja/about/disclaimer.html">免責事項</a><a href="https://m.php.cn/ja/update/article_0_1.html">Sitemap</a></div><div class="footerbottom"><p> © php.cn All rights reserved </p></div></div></footer><script>isLogin = 0;</script><script type="text/javascript" src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.js?4.9.47"></script></div><script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><script>jQuery.fn.wait = function (func, times, interval) { var _times = times || -1, //100次 _interval = interval || 20, //20毫秒每次 _self = this, _selector = this.selector, //选择器 _iIntervalID; //定时器id if( this.length ){ //如果已经获取到了,就直接执行函数 func && func.call(this); } else { _iIntervalID = setInterval(function() { if(!_times) { //是0就退出 clearInterval(_iIntervalID); } _times <= 0 || _times--; //如果是正数就 -- _self = $(_selector); //再次选择 if( _self.length ) { //判断是否取到 func && func.call(_self); clearInterval(_iIntervalID); } }, _interval); } return this; } $("table.syntaxhighlighter").wait(function() { $('table.syntaxhighlighter').append("<p class='cnblogs_code_footer'><span class='cnblogs_code_footer_icon'></span></p>"); }); $(document).on("click", ".cnblogs_code_footer",function(){ $(this).parents('table.syntaxhighlighter').css('display','inline-table');$(this).hide(); }); $('.nphpQianCont').viewer({navbar:true,title:false,toolbar:false,movable:false,viewed:function(){$('img').click(function(){$('.viewer-close').trigger('click');});}}); </script></body></html>