Vanilla JavaScript: disabilitazione di una determinata combinazione di tasti preesistente in una pagina Web

In questa pagina di modifica casuale di Wikipedia in inglese è ansible aggiungere del contenuto (ad esempio “test”), quindi salvarlo con la combinazione di tasti preesistente di Alt + Maiusc + S.

Desidero evitare questo comportamento in modo specifico (senza rimuovere il pulsante di salvataggio con document.querySelector("#wpSave").remove(); ).

Ho provato il seguente codice che ha fallito:

 // ==UserScript== // @name wiki // @match https://*.wikipedia.org/* // ==/UserScript== document.addEventListener("DOMContentLoaded", ()=>{ document.addEventListener('keypress', function(e) { if (e.key == 16 && e.key == 18 && e.key == 83) { return false; } }); }); 

Ho anche provato a sostituire return false con e.preventDefault() o evt.stopPropagation() , ma tutti falliti (nessun errore di console).

Cosa c’è che non va nel codice?


Nota: questa domanda differisce da questa, concentrandosi sulla distriggerszione di una determinata funzionalità di combinazione di tasti preesistente in generale e non sul salvataggio di funzionalità in generale.


Aggiornamento per dotoconor

L’ho usato in console ma ho ancora lo stesso problema:

 document.addEventListener("DOMContentLoaded", ()=>{ const state = {}; document.addEventListener('keydown', function(e) { state[e.key] = true; }); document.addEventListener('keyup', function(e) { state[e.key] = false; }); document.addEventListener('keyup', function(e) { state[e.key] = false; if (state["Alt"] && state["Shift"] && (state["S"] || state["s"])) { return e.preventDefault(); } }); }); 

Sarà presente un solo evento chiave alla volta, quindi è necessario creare una macchina a stati per determinare quali sono attivi e distriggersti. Considera questo:

 const state = {}; document.addEventListener('keydown', function(e) { state[e.key] = true; }); 

 document.addEventListener('keyup', function(e) { state[e.key] = false; }); 

Ora con questo, è ansible verificare se le chiavi desiderate vengono tutte spinte verso il basso in una volta, quindi impedire che l’ultimo tasto venga gettato nel DOM.

 document.addEventListener('keyup', function(e) { state[e.key] = false; if (state["Alt"] && state["Shift"] && (state["S"] || state["s"])) { return e.preventDefault(); } });