Ctrl+S prevenirPredeterminado en Chrome

quiero atrapar Ctrl+S en Chrome, y evitar el comportamiento predeterminado del navegador para guardar la página. ¿Cómo?

(Solo publiqué la pregunta y la respuesta, ya que estuve después de esto durante bastante tiempo y no encontré una solución)

preguntado el 12 de junio de 12 a las 17:06

4 Respuestas

Por lo que puedo ver, la salsa secreta es que Ctrl+S NO activa el evento de pulsación de tecla, solo el evento de pulsación de tecla.

Usar jQuery.hotkeys:

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

Solo con jQuery:

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

Editar 2012.12.17 - jQuery.hotkeys dice

Las teclas de acceso directo no se rastrean si está dentro de un elemento de entrada (a menos que vincule explícitamente la tecla de acceso directo directamente a la entrada). Esto ayuda a evitar conflictos con la escritura normal del usuario.

Respondido el 16 de Septiembre de 17 a las 21:09

jQuery.hotkeys no parece capturar el evento cuando se enfoca un área de texto o un campo de entrada. - brian m caza

@BrianM.Hunt muy cierto gracias. Documentos citados ya que esta es una "característica" documentada: sopa

Consejo: no utilice keyup, esto siempre activará primero el cuadro de diálogo Guardar. siempre ve por keydown. - Avatar

@KaiNoack ¡Muchas gracias! Me quedé perplejo en cuanto a por qué mi código no funcionaba, ¡pero nadie más ha señalado este hecho crítico! - Dantiston

Tip: No uses jQuery, esto solo traerá tristeza. - Klesun

"Tomado de Anular control + s (guardar funcionalidad) en el navegador

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

contestado el 18 de mayo de 21 a las 19:05

Nota, en 2k21 keyCode está en desuso, es recomendado de usar keyboardEvent.key === 's' hoy en día... En realidad, para qué comentar cuando puedo editar >:D - Klesun

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

respondido 31 mar '15, 08:03

Solución todo en uno para evitar datos

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

Respondido el 12 de diciembre de 19 a las 13:12

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.