【问题标题】:Disabling keyboard shortcuts using javascript not working in Safari?使用javascript禁用键盘快捷键在Safari中不起作用?
【发布时间】:2016-09-19 04:24:59
【问题描述】:

我尝试使用 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();
    }
}

【问题讨论】:

    标签: javascript safari cross-browser keyboard-shortcuts


    【解决方案1】:

    高级系统事件,例如CMD+F - 表示在页面上搜索,在文档或窗口上冒泡。 但!您不能在 safari 中覆盖 CTRL+R、CTRL+W 或 CMD 事件。

    防止用户刷新页面的更好方法是 window.onbeforeunload = 函数(事件){}

    您需要使用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 - 小

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 2015-12-31
      • 1970-01-01
      相关资源
      最近更新 更多