只是有一个想法,想知道是否有可能在愚人节的精神。键盘上隐藏的秘密消息输入
是否有可能在网站上随机键入类似于(a,up,down,b,L1,R1)等游戏控制台的密码,但是在网站上,您可以键入你的键盘“9 2 k(uparrow)3”,只要你在网站上,它会做一些事情,比如说alert('hey')
?很想看看你会怎么做。
只是有一个想法,想知道是否有可能在愚人节的精神。键盘上隐藏的秘密消息输入
是否有可能在网站上随机键入类似于(a,up,down,b,L1,R1)等游戏控制台的密码,但是在网站上,您可以键入你的键盘“9 2 k(uparrow)3”,只要你在网站上,它会做一些事情,比如说alert('hey')
?很想看看你会怎么做。
// 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/
你需要在运行区域(底部右侧窗格)尝试组合键之前单击。
在输入整个事件之前,这不会将组合键的第一个键移开吗?如果你遍历'keys',一旦你放入组合键的第一个键,警报就不会触发? – Interrobang
你只是将1个代码推入每个按键的按键阵列(同时弹出最古老的不需要的按键 - 注意按键数组初始化时间与组合一样长)。然后你基本上比较最后的x(=组合长度)键与组合,并且如果它匹配则发出警报。干杯! – potatopeelings
啊,你初始化了一段时间,我错过了那个部分,所以它看起来像你会推,然后立即移出相同的键! – Interrobang
那么,你可以做些事情来利用这一点,并使其更加混淆,以便用户不得不跳过一些箍环来获得密钥组合,但是这对于基本实现应该足够好了。
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。
Upvoted,但我认为一个数组比带分隔符的字符串更优雅。 – Interrobang
我很想对potatopeelings的答案做出准确的评论。它更简洁,干净。字符串连接的唯一好处是它是一个简单的'==='比较,而不是循环遍历每个元素。虽然它可能与数组相同,但使用'.join()'。这种方法的任何好处都是名义上的,最坏的情况是不存在的。 :) –
**是**,这是可能的,因为你必须编写代码。首先在文档上绑定按键事件,抓住他们获取keyCode的某处。当他们在很短的时间内(_say 1秒)顺序执行'alert('hey fool!')' – Tushar
你甚至可以通过websocket发送字符并在服务器上检查它们,如果你不想让用户成为能够检查网站的来源并找出组合。 (如果你不介意带宽)。 – JCOC611
@ JCOC611虽然这在理论上是一个很酷的想法,但甚至分析服务都很难感受到侵入性,因为它本质上可以使网站看起来像键盘记录器。 –