2016-04-02 16 views
0

ちょうど考えを持って、それが可能かどうかは、4月の愚か者の精神で可能だった。秘密鍵盤に隠されたメッセージを入力してください

(a、up、down、b、L1、R1)のようなゲームのようなウェブサイトにあなたがランダムに入力する秘密のコードを持つことは可能ですか?あなたのキーボードは "9 2 k(uparrow)3"です。あなたがウェブサイト上にいる限り、それは何かをします、alert('hey')と言うでしょうか?あなたがそれをやる方法を知りたいなら、興味があります。

+4

**はい**可能ですが、コードを書く必要があります。最初に文書上のkeypressイベントをバインドし、どこかでkeyCodeを取得します。短い時間内に連続して来たら(_say 1秒)、 'alert( 'hey fool!')'を実行してください。 – Tushar

+2

ユーザーを欲しくない場合は、websocketで文字を送信してサーバー上で確認することもできますウェブサイトのソースを調べて、その組み合わせを把握することができます。 (もしあなたが帯域幅に気をつけなければ)。 – JCOC611

+0

@ JCOC611これは理論上のクールなアイデアですが、分析サービスでさえ侵略的だと感じることはまれです。なぜなら、基本的にWebサイトをキーロガーのように見せるからです。 –

答えて

3
// our combo 
    var combo = [57, 50, 75, 38, 51]; 

    var keys = new Array(combo.length); 
    $(document).on('keydown', function(evt){ 
    // remove the earliest of the stored keys 
    keys.shift(); 
    // push in the latest key pressed 
    keys.push(evt.which); 

    // compare with combo array - you could use any comparison method (convert to string,...) 
    if (!keys.some(function(e, i) { return e !== combo[i] })) 
     alert('hey') 
    }) 

フィドル - https://jsfiddle.net/kzj5e7Lk/

あなたはキーの組み合わせを試す前に、実行エリア(右下のペイン)をクリックする必要があります。

+0

全体を入力する前に、これはコンボの最初のキーを移動しませんか? 'keys'を反復すると、コンボの最初のキーを入れると直ちに警告は出ませんか? – Interrobang

+2

各キー押しのキー配列に1つのコードだけをプッシュします(最も古い不要なキーをポップする - キー配列がコンボの長さになるように初期化されていることに注意してください)。次に、最後のx(=コンボ長さ)キーとコンボを比較し、一致するかどうか警告します。乾杯! – potatopeelings

+1

ああ、長さで初期化すると、私はその部分を逃してしまったので、同じキーを押してすぐにシフトするように見えました! – Interrobang

2

これを活用して、難読化して秘密鍵の組み合わせを得るためにはもっと多くのフープを飛ばしなければならないいくつかのことがありますが、これは基本的な実装には十分であるはずです。互いの1秒以内に各文字にコードを入力するためにそれらを必要とします

var code = '.57.50.75.38.51'; 
 
var entered = ''; 
 
var clearCombo; 
 

 
//keypress won't register up arrow 
 

 
$('body').keydown(function (e) { 
 
    clearTimeout(clearCombo); 
 
    entered += '.' + e.which; 
 
    clearCombo = setTimeout(function() { 
 
    entered = ''; 
 
    }, 1000); 
 
    if (entered === code) { 
 
    alert('i pity the foobar'); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

。 (set/clearTimeout)また、入力したキーが消えてしまった場合にタイムアウトが発生するのを待たなければならないことを意味します。

追加のライブラリを含めても構わない場合は、Mousetrapを参照してください。

+1

Upvotedしかし、私は配列が区切り文字を持つ文字列よりもエレガントだと思います。 – Interrobang

+0

私はpotatopeelingsの答えにその正確なコメントをするように誘惑されました。それはより簡潔で清潔です。文字列連結の唯一の利点は、各要素をループするのではなく、単純な '==='比較であることです。配列と同じで、 '.join()'を使うこともできます。実際、この方法のメリットは最高であり、最悪では存在しません。 :) –

関連する問題