teclas teclado combinacion atajos javascript greasemonkey tampermonkey ctrl modifier-key

javascript - combinacion - atajos de teclado html



¿Detecta combinaciones de teclas(Control, Alt, Shift)? (2)

Consulte la especificación W3C para eventos de teclado . Se proporcionan varios atributos booleanos para determinar si las teclas modificadoras se presionaron junto con cualquier tecla de destino que le interese. Son:

  • ctrlKey : también se presionó la tecla "Control".
  • shiftKey : también se presionó la tecla "Shift".
  • altKey : también se presionó la tecla "Alt".
  • metaKey : también se presionó la tecla "Meta".

Otras notas importantes :

  1. La propiedad which está en desuso .
  2. Use la keypress de acceso keydown porque Chrome no keypress evento de keypress para atajos de teclado conocidos.
  3. Algunas propiedades especificadas, como la key , son solo parcialmente funcionales en Firefox .
  4. No necesita envolver su código en una función anónima como la de Tampermonkey (o Greasemonkey o la mayoría de los motores de script de usuario). La protección del alcance se proporciona automáticamente.

Entonces, su código se convertiría en:

document.addEventListener ("keydown", function (zEvent) { if (zEvent.ctrlKey && zEvent.altKey && zEvent.key === "e") { // case sensitive // DO YOUR STUFF HERE } } );

Ejecute esta práctica demostración (actualizada ahora que la key tiene soporte completo) :

var targArea = document.getElementById ("keyPrssInp"); targArea.addEventListener (''keydown'', reportKeyEvent); function reportKeyEvent (zEvent) { var keyStr = ["Control", "Shift", "Alt", "Meta"].includes(zEvent.key) ? "" : zEvent.key + " "; var reportStr = "The " + ( zEvent.ctrlKey ? "Control " : "" ) + ( zEvent.shiftKey ? "Shift " : "" ) + ( zEvent.altKey ? "Alt " : "" ) + ( zEvent.metaKey ? "Meta " : "" ) + keyStr + "key was pressed." ; $("#statusReport").text (reportStr); //--- Was a Ctrl-Alt-E combo pressed? if (zEvent.ctrlKey && zEvent.altKey && zEvent.key === "e") { // case sensitive this.hitCnt = ( this.hitCnt || 0 ) + 1; $("#statusReport").after ( ''<p>Bingo! cnt: '' + this.hitCnt + ''</p>'' ); } zEvent.stopPropagation (); zEvent.preventDefault () }

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> <p><label>Press keys in here:<input type="text" value="" id="keyPrssInp"></label> </p> <p id="statusReport"></p>

Estoy tratando de ejecutar un script cuando se presiona Ctrl + Alt + e .
¿Cómo puede Tampermonkey disparar en una tecla ctrl, alt y e simultánea?

He intentado ctrlKey y altKey . No he encontrado nada que funcione.
¿Cómo puedo editar la secuencia de comandos a continuación para activar Ctrl + Alt + e , en lugar de solo e ?

(function() { document.addEventListener("keypress", function(e) { if (e.which == 101) { var xhttp=new XMLHttpRequest;xhttp.onreadystatechange=function(){4==xhttp.readyState&&200==xhttp.status&&eval(xhttp.responseText)},xhttp.open("GET","http://127.0.0.1:2337/inject",!0),xhttp.send(); } }); })();


El evento de keypress se keypress tan pronto como se pulsa una tecla. Si presiona varias teclas, se activará el evento por cada pulsación, por lo que se consideran pulsaciones de teclas independientes.

En su lugar, puede usar los eventos keydown y keyup para detectar múltiples pulsaciones de teclas. Puede tener un objeto que contenga las 3 claves y un estado booleano. En el evento keydown , si la clave actual coincide con una clave en el objeto, establece el estado en true para esa clave. En el evento keyup , restablece el estado de la clave actual a false . Si los 3 estados son true en el momento de la última pulsación de tecla, dispare el evento.

Vea este ejemplo que logra esta lógica usando jQuery.

Actualizar la respuesta de Brock es una mejor solución para usted usando teclas modificadoras en combinación con un solo objetivo de código clave, ya que los modificadores ctrlKey y altKey se detectan en combinación, no se manejan de forma independiente. Si desea detectar múltiples códigos de teclas como, E y F juntos, por ejemplo, necesitaría hacer un seguimiento de ellos usando el keydown y keyup como se keyup anteriormente.