Ctrl+S preventDefault in Chrome

前端 未结 4 1386
长发绾君心
长发绾君心 2020-12-04 23:35

I Want to catch Ctrl+S in Chrome, and prevent the default browser behavior to save the page. How?

(Just posting the question & answer as I

相关标签:
4条回答
  • 2020-12-05 00:12

    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;
            }
        }
    };
       

    0 讨论(0)
  • 2020-12-05 00:13

    All in one solution to prevent data

    // 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;
      }
    });
    
    0 讨论(0)
  • 2020-12-05 00:16

    "Borrowed" from Overriding control+s (save functionality) in browser

    document.addEventListener("keydown", function(e) {
      if (e.keyCode == 83 && (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey)) {
        e.preventDefault();
        alert('captured');
      }
    }, false);
    
    0 讨论(0)
  • 2020-12-05 00:24

    As far as I can see, the secret sauce is, that Ctrl+S does NOT fire the keypress event, only the keydown event.

    Using jQuery.hotkeys:

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

    Only with jQuery:

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

    Edit 2012.12.17 - jQuery.hotkeys says

    Hotkeys aren't tracked if you're inside of an input element (unless you explicitly bind the hotkey directly to the input). This helps to avoid conflict with normal user typing.

    0 讨论(0)
提交回复
热议问题