使用JavaScript无法在Safari中禁用键盘快捷键?

时间:2016-05-22 07:04:14

标签: javascript safari cross-browser keyboard-shortcuts

我尝试使用javascript禁用cmd+rcmd+l个快捷方式,它在除safari之外的所有浏览器中都运行良好。

请检查jsfiddle

var isMacOS = navigator.userAgent.toLowerCase().indexOf("mac") != -1;
$("input, textarea").on('keydown',function(ev){
    checkKeyBoardEvents(ev, true);
}).on('keyup',function(ev){
    checkKeyBoardEvents(ev);
}).on('keypress',function(ev){
    checkKeyBoardEvents(ev);
});
function checkKeyBoardEvents(ev, printChar){
    var keyCode = ev.keyCode;
    var charCode = String.fromCharCode(keyCode);
    if((isMacOS && ev.metaKey) || ev.ctrlKey){
        $("#keyLogs").append("<p>You pressed "+ (ev.ctrlKey ? "ctrl":"cmd")+"+"+charCode); 
    }
    if(((isMacOS && ev.metaKey) || (!isMacOS && ev.ctrlKey)) && (keyCode === 76 || keyCode === 82)){
        if(printChar){
        var currentValue = $(ev.target).val();
        $(ev.target).val(currentValue + (currentValue.length ? ". " : "") +"You pressed cmd+"+charCode+". " );
    }
    ev.preventDefault();
    ev.stopPropagation();
    }
}

1 个答案:

答案 0 :(得分:0)

高级系统事件,例如CMD + F-表示在页面上搜索,在文档或窗口上冒泡。 但!您无法在野生动物园中覆盖CTRL + R,CTRL + W或CMD事件。

阻止用户刷新页面的更好方法是      window.onbeforeunload = function(event){}

您需要使用事件的capturing阶段来处理并阻止其默认行为。

例如

function preventFn(event) {
    if (event.keyCode === YOU_KEY_CODE && event.metaKey) {
        event.preventDefault();
        event.stopPropagation();
    }
}
document.addEventListener('keydown', preventFn, true); // true means use capture phase of event

例如,您可以使用外部库来组织快捷方式,您的代码会更好,更简洁。

hotkeys-热门

stack-shortcuts-小