Javascript 覆盖浏览器';键盘快捷键
我想通过截取document对象的keypress事件处理程序,而不是accesskey属性,为我的web应用程序中的几个页面添加对键盘快捷键的支持 问题是,每个浏览器都有自己的键盘组合,因此不可能找到一组适用于所有web浏览器且一致的键盘组合。(例如,如果保存的快捷键是Ctrl+Shift+s,而删除的快捷键是Alt+d,那就太傻了。) 所以我想用我的浏览器在几页中完全覆盖浏览器快捷方式会更简单Javascript 覆盖浏览器';键盘快捷键,javascript,Javascript,我想通过截取document对象的keypress事件处理程序,而不是accesskey属性,为我的web应用程序中的几个页面添加对键盘快捷键的支持 问题是,每个浏览器都有自己的键盘组合,因此不可能找到一组适用于所有web浏览器且一致的键盘组合。(例如,如果保存的快捷键是Ctrl+Shift+s,而删除的快捷键是Alt+d,那就太傻了。) 所以我想用我的浏览器在几页中完全覆盖浏览器快捷方式会更简单 撇开所有不利因素不谈,有可能吗?如果是这样的话,你是如何做到的?这里有一个很好的报道: onkey
撇开所有不利因素不谈,有可能吗?如果是这样的话,你是如何做到的?这里有一个很好的报道:
onkeydown = function(e){
if(e.ctrlKey && e.keyCode == 'S'.charCodeAt(0)){
e.preventDefault();
//your saving code
}
}
至于这是否是应该做的事情,stackoverflow的问题编辑器在不中断太多的情况下覆盖了相当多的键(将鼠标悬停在工具栏按钮上)。以下是我解决这个问题的方法: 浏览器的大部分(如果不是全部)快捷方式将被覆盖。只有系统键,如Alt+Tab或Windows键不会
document.onkeydown = overrideKeyboardEvent;
document.onkeyup = overrideKeyboardEvent;
var keyIsDown = {};
function overrideKeyboardEvent(e){
switch(e.type){
case "keydown":
if(!keyIsDown[e.keyCode]){
keyIsDown[e.keyCode] = true;
// do key down stuff here
}
break;
case "keyup":
delete(keyIsDown[e.keyCode]);
// do key up stuff here
break;
}
disabledEventPropagation(e);
e.preventDefault();
return false;
}
function disabledEventPropagation(e){
if(e){
if(e.stopPropagation){
e.stopPropagation();
} else if(window.event){
window.event.cancelBubble = true;
}
}
}
以下是我的解决方案:
document.onkeydown = function () {
if ((window.event.keyCode == 121) && (window.event.ctrlKey))) {
window.event.returnValue = false;
window.event.cancelBubble = true;
window.event.keyCode = 0;
return false;
}
}
在很多情况下,我认为这是行不通的。对于像“tab”这样的键,很多浏览器会在脚本能够正确改变键的行为之前拦截命令。
event.preventDefault
只在W3C兼容的浏览器上有效(如果有效),而不是(比如)通用web上的主控浏览器,微软的——当然,除非,您正在使用类似jQuery的库为您添加它。T.J.>您的意思是jQuery甚至可以在IE上覆盖键盘快捷键?您需要使用e.preventDefault()处理按键事件;e、 停止传播()代码>。在处理keydown时,需要记住的一点是,如果用户长时间按住该键,可能会出现多次。您应该在堆栈溢出时直接回答问题,而不是链接到其他地方(外部链接可能中断或更改,或者不直接回答问题)。看,我真的很讨厌当我使用StackOverflow的问题编辑器时Ctrl-L被偷走的方式。使编辑问题时进行web搜索变得更加困难。这并没有阻止ALT+E打开浏览器的编辑菜单。我们可以覆盖“ctrl+u”、“f12”吗。如果我们无法覆盖,我在想,当至少按下键时,我会再次在内部触发事件。然后,如果它被打开,它将被关闭。出于个人考虑,请避免覆盖浏览器之间一致的常见浏览器快捷方式,例如C-w
,C-t
,C-s-t
。。。谷歌的一些产品覆盖了常见的浏览器快捷方式,这让人非常恼火!很难知道什么是“常见的”用户快捷方式。例如,许多用户是否使用C-e
,或者覆盖是否相对较好?如果有一张使用每种浏览器快捷方式的用户百分比图表就太好了。@JKillian确实是,但是你在哪里衡量截止值呢?1%或0.5%的人仍然会感到恼火。我相信谷歌的工程师们都知道他们是区块捷径,但他们试图找到对更广泛受众有用的捷径。(还有一个问题,它们对更广泛的受众有用吗?)!这只会更改事件键代码,所选默认键不会执行任何操作