在此随机English-Wikipedia edit page可以添加一些内容(比如“测试”),然后通过 Alt+Shift+S 的预先存在的组合键保存它。
我希望特别地防止这种行为(无需使用 document.querySelector("#wpSave").remove();
删除保存按钮)。
我尝试了以下失败的代码:
// ==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;
}
});
});
我还尝试用 e.preventDefault()
或 evt.stopPropagation()
替换 return false
,但都失败了(没有控制台错误).
代码有什么问题?
注意:这个问题不同于this one通过专注于一般地禁用给定的预先存在的组合键功能,而不是一般地保存功能。
dotoconor 更新
我在控制台中使用了它,但我仍然遇到同样的问题:
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();
}
});
});
最佳答案
一次只会出现一个按键事件,因此您必须创建一个状态机来确定哪些是打开的,哪些是关闭的。 考虑一下:
const state = {};
document.addEventListener('keydown', function(e) {
state[e.key] = true;
});
document.addEventListener('keyup', function(e) {
state[e.key] = false;
});
现在有了这个,您可以检查您想要的键是否一次都被按下,然后防止最后一次按键向下滴入 DOM。
document.addEventListener('keyup', function(e) {
state[e.key] = false;
if (state["Alt"] && state["Shift"] && (state["S"] || state["s"])) {
return e.preventDefault();
}
});
关于javascript - Vanilla JavaScript : Disabling a given preexisting key-combo in a webpage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52924807/