【问题标题】:Ctrl+S preventDefault in ChromeCtrl+S 防止 Chrome 中的默认设置
【发布时间】:2012-06-15 13:57:00
【问题描述】:

我想在 Chrome 中捕捉 Ctrl+S,并阻止默认浏览器行为来保存页面。怎么样?

(只是发布问题和答案,因为我在此之后很长时间并没有找到解决方案)

【问题讨论】:

标签: javascript jquery google-chrome preventdefault


【解决方案1】:

据我所知,秘诀是 Ctrl+S 不会触发 keypress 事件,只会触发 keydown 事件。

使用jQuery.hotkeys

$(document).bind('keydown', 'ctrl+s', function(e) {
    e.preventDefault();
    alert('Ctrl+S');
    return false;
});

仅适用于 jQuery:

$(document).bind('keydown', function(e) {
  if(e.ctrlKey && (e.which == 83)) {
    e.preventDefault();
    alert('Ctrl+S');
    return false;
  }
});

编辑 2012.12.17 - jQuery.hotkeys 说

如果您在输入元素内,则不会跟踪热键(除非您 显式地将热键直接绑定到输入)。这有助于避免 与普通用户输入冲突。

【讨论】:

  • jQuery.hotkeys 似乎没有捕获文本区域或输入字段聚焦时的事件。
  • @BrianM.Hunt 非常感谢。引用文档,因为这是记录在案的“功能”
  • 提示:不要使用keyup,这总是会首先触发保存对话框。总是选择keydown
  • @KaiNoack 非常感谢!我一直很困惑为什么我的代码不起作用,但没有其他人指出这个关键事实!
  • 提示:不要使用jQuery,这只会带来悲伤。
【解决方案2】:

“借”自Overriding control+s (save functionality) in browser

document.addEventListener("keydown", function(e) {
  if (e.key === 's' && (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey)) {
    e.preventDefault();
    alert('captured');
  }
}, false);

【讨论】:

  • 注意,在 2k21 中 keyCode 已弃用,现在使用 recommendedkeyboardEvent.key === 's'...实际上,为什么我可以编辑时发表评论>:D
【解决方案3】:

document.onkeydown = function (e) {
    e = e || window.event;//Get event
    if (e.ctrlKey) {
        var c = e.which || e.keyCode;//Get key code
        switch (c) {
            case 83://Block Ctrl+S
                e.preventDefault();     
                e.stopPropagation();
            break;
        }
    }
};
   

【讨论】:

    【解决方案4】:

    一站式解决数据问题

    // disable right click
    $(function() {
        $(this).bind("contextmenu", function(e) {
            e.preventDefault();
        });
    }); 
    
    // Prevent F12      
    $(document).keydown(function (event) {
        if (event.keyCode == 123) { // Prevent F12
            return false;
        } else if (event.ctrlKey && event.shiftKey && event.keyCode == 73) { // Prevent Ctrl+Shift+I        
            return false;
        }
    });
    
    //stop copy of content
    function killCopy(e){
        return false
    }
    function reEnable(){
        return true
    }
    document.onselectstart=new Function ("return false")
        if (window.sidebar){
        document.onmousedown=killCopy
        document.onclick=reEnable
    }
    
    // prevent ctrl + s
    $(document).bind('keydown', function(e) {
      if(e.ctrlKey && (e.which == 83)) {
        e.preventDefault();
        return false;
      }
    });
    

    【讨论】:

      猜你喜欢
      • 2013-02-12
      • 1970-01-01
      • 2013-07-25
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 2018-06-14
      相关资源
      最近更新 更多