Sunday, June 2, 2024
101
rated 0 times [  102] [ 1]  / answers: 1 / hits: 58252  / 8 Years ago, wed, june 1, 2016, 12:00:00

I am trying to make a script run when Ctrl + Alt + e is pressed.

How can Tampermonkey fire on a simultaneous ctrl, alt, and e key?



I have tried ctrlKey, and altKey. I've found nothing that works.

How can I edit the script below to fire on Ctrl + Alt + e, instead of just 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();
}
});
})();




More From » greasemonkey

 Answers
10

Refer to the W3C spec for keyboard events. Several boolean attributes are provided to determine if modifier keys were pressed in conjunction with whatever target key you are interested in. They are:




  • ctrlKey     -- The Control key was also pressed.

  • shiftKey   -- The Shift key was also pressed.

  • altKey       -- The Alt key was also pressed.

  • metaKey     -- The Meta key was also pressed.



Other important notes:




  1. The which property is deprecated.

  2. Use keydown because Chrome does not fire the keypress event for known keyboard shortcuts.

  3. Some spec'd properties, such as key, are only partly functional in Firefox.

  4. You do not need to wrap your code in an anonymous function like that for Tampermonkey (or Greasemonkey or most userscript engines). Scope protection is automatically provided.



So, your code would become:



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





Run this handy demo (updated now that key has full support):





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>




[#61942] Monday, May 30, 2016, 8 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
georgeh

Total Points: 193
Total Questions: 103
Total Answers: 111

Location: United States Minor Outlying Island
Member since Sat, May 28, 2022
2 Years ago
;