web-dev-qa-db-fra.com

Ctrl + S preventDefault dans Chrome

Je veux attraper Ctrl+S dans Chrome et empêcher le comportement du navigateur par défaut pour enregistrer la page. Comment?

(Il suffit de poster la question et la réponse car j'étais après cela pendant assez longtemps et je n'ai pas trouvé de solution)

36
zupa

Pour autant que je puisse voir, la sauce secrète est que Ctrl+S ne déclenche PAS l'événement de pression de touche, uniquement l'événement de pression de touche.

Utilisation de jQuery.hotkeys :

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

Uniquement avec jQuery:

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

Modifier 2012.12.17 - jQuery.hotkeys dit

Les raccourcis clavier ne sont pas suivis si vous êtes à l'intérieur d'un élément d'entrée (sauf si vous liez explicitement le raccourci clavier directement à l'entrée). Cela permet d'éviter les conflits avec la frappe normale des utilisateurs.

50
zupa

"Emprunté" à Remplacement du contrôle + s (fonctionnalité de sauvegarde) dans le navigateur

document.addEventListener("keydown", function(e) {
  if (e.keyCode == 83 && (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey)) {
    e.preventDefault();
    alert('captured');
  }
}, false);
14
BumbleB2na
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;
        }
    }
};
   
3
Latha