Próbuję uruchomić skrypt, gdyCtrl+Alt+ejest wciśnięty.
Jak można uruchomić programme Tampermonkey na jednoczesnym klawiszu Ctrl, Alt i E?
Próbowałem ctrlKey
i altKey
. Nie znalazłem nic, co działa.
Jak mogę edytować poniższy skrypt, aby strzelaćCtrl+Alt+e, zamiast po prostue?
(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();
}
});
})();
Reportez-vous à spécification W3C pour les événements de clavier . Plusieurs attributs booléens sont fournis pour déterminer si touches de modification ont été utilisées conjointement avec la touche cible qui vous intéresse. Ce sont:
ctrlKey
- La touche "Control" a également été actionnée.shiftKey
- La touche "Shift" a également été enfoncée.altKey
- La touche "Alt" a également été actionnée.metaKey
- La touche "Meta" a également été actionnée.Autre notes importantes:
which
est obsolète }.keydown
car Chrome ne déclenche pas l'événement keypress
pour les raccourcis clavier connus.key
, sont partiellement fonctionnel dans Firefox .Donc, votre code deviendrait:
document.addEventListener ("keydown", function (zEvent) {
if (zEvent.ctrlKey && zEvent.altKey && zEvent.code === "KeyE") {
// DO YOUR STUFF HERE
}
} );
Exécutez cette démo pratique:
var targArea = document.getElementById ("keyPrssInp");
targArea.addEventListener ('keydown', reportKeyEvent);
function reportKeyEvent (zEvent) {
var reportStr =
"The " +
( zEvent.ctrlKey ? "Control " : "" ) +
( zEvent.shiftKey ? "Shift " : "" ) +
( zEvent.altKey ? "Alt " : "" ) +
( zEvent.metaKey ? "Meta " : "" ) +
zEvent.code + " " +
"key was pressed."
;
$("#statusReport").text (reportStr);
//--- Was a Ctrl-Alt-E combo pressed?
if (zEvent.ctrlKey && zEvent.altKey && zEvent.code === "KeyE") {
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>
L'événement keypress
est déclenché dès qu'une touche est enfoncée. Si vous appuyez sur plusieurs touches, l'événement est déclenché à chaque pression; elles sont donc considérées comme des pressions indépendantes.
Au lieu de cela, vous pouvez utiliser les événements keydown
et keyup
pour détecter plusieurs appuis sur les touches. Vous pouvez avoir un objet contenant les 3 clés et un état booléen. Sur l'événement keydown
, si la clé actuelle correspond à une clé de l'objet, vous définissez l'état sur true
pour cette clé. Sur l'événement keyup
, vous réinitialisez l'état de la clé actuelle sur false
. Si tous les 3 états sont true
au moment de la dernière pression sur une touche, déclenchez l'événement.
Voir cet exemple qui réalise cette logique en utilisant jQuery.
Update La réponse de Brock est une meilleure solution pour vous en combinant des touches de modification avec une cible de code de touche unique, car les modificateurs ctrlKey
et altKey
sont détectés en combinaison, et ne sont pas gérés indépendamment. Si vous souhaitez détecter plusieurs codes de clé tels que E
et F
ensemble, par exemple, vous devez les suivre à l'aide de keydown
et keyup
comme indiqué ci-dessus.