2016-04-02 32 views
0

只是有一个想法,想知道是否有可能在愚人节的精神。键盘上隐藏的秘密消息输入

是否有可能在网站上随机键入类似于(a,up,down,b,L1,R1)等游戏控制台的密码,但是在网站上,您可以键入你的键盘“9 2 k(uparrow)3”,只要你在网站上,它会做一些事情,比如说alert('hey')?很想看看你会怎么做。

+4

**是**,这是可能的,因为你必须编写代码。首先在文档上绑定按键事件,抓住他们获取keyCode的某处。当他们在很短的时间内(_say 1秒)顺序执行'alert('hey fool!')' – Tushar

+2

你甚至可以通过websocket发送字符并在服务器上检查它们,如果你不想让用户成为能够检查网站的来源并找出组合。 (如果你不介意带宽)。 – JCOC611

+0

@ JCOC611虽然这在理论上是一个很酷的想法,但甚至分析服务都很难感受到侵入性,因为它本质上可以使网站看起来像键盘记录器。 –

回答

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

那么,你可以做些事情来利用这一点,并使其更加混淆,以便用户不得不跳过一些箍环来获得密钥组合,但是这对于基本实现应该足够好了。

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()'。这种方法的任何好处都是名义上的,最坏的情况是不存在的。 :) –