在此随机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;
}
});
});
我还尝试将return false
替换为e.preventDefault()
或evt.stopPropagation()
,但都失败了(没有控制台错误)。
代码有什么问题?
注意::这个问题与this one的不同之处在于,通常只专注于禁用给定的既有键组合功能,而不是保存功能一般。
我在控制台中使用了此功能,但仍然存在相同的问题:
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();
}
});
});
答案 0 :(得分:0)
一次仅会出现一个关键事件,因此您必须创建一个状态机来确定哪些事件处于打开和关闭状态。 考虑一下:
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();
}
});