假设我是一名初级Wikipedia用户,只想尝试使用Wiki文本编辑器在编辑页面中更改某些Wikipedian内容,但不以任何方式保存更改(即使没有错误),因此寻求通过原始JavaScript阻止任何保存功能的方法。
如果我在希伯来语维基百科中搜索edit-page,可以通过鼠标单击“保存页面”按钮(illustration)来保存或发布页面,可以使用以下方法将其从DOM中删除:
document.querySelector("#wpSave").remove();
但是,假设我仍然可以通过 alt + shift + s 保存或发布内容,并且我也想防止这种可能的保存行为;我为此尝试了以下代码:
// ==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;
}
});
});
代码失败(控制台中没有特殊错误)。为什么失败了?
答案 0 :(得分:1)
keyCodes均表示修饰键。 keypress
事件无法使用以下键触发:
document.addEventListener('keypress', function(e) {
console.log('keypress worked');
});
document.addEventListener('keyup', function(e) {
console.log('keyup worked');
});
此外,请注意,.keyCode
已过时。应该使用.key
答案 1 :(得分:1)
您的问题中有很多问题:
event.key
与event.keyCode
不同,请参阅documentation。e.key == 16 && e.key == 18 && e.key == 83
永远不会正确。false
不会阻止事件传播。您可以通过以下方式来实现您的目标:
document.addEventListener("keypress", evt => {
// refer to https://stackoverflow.com/a/2878005/8746648
if(evt.altKey && evt.key == "S") {
alert("prevent this message");
evt.preventDefault();
}
});
// refer to https://stackoverflow.com/a/35611393/8746648
document.addEventListener("keypress", evt => {
if(evt.altKey && evt.key == "S") {
evt.stopPropagation();
}
}, true);
true
。evt.key
与大写字母“ s”进行了比较。答案 2 :(得分:0)
如果您可以单击“保存”按钮后知道调用哪种方法,则以下方法可能会有所帮助:
我建议的方法是按f12键,然后单击“保存”按钮以找到保存方法。现在,完成dom
的加载(在您的代码中)后,您必须将获得的函数替换为一个空函数,如下所示:
FOUNDEDSaveFunc = function(){};
如果单击保存按钮导致刷新,则可以使用fiddler
之类的某些应用来获得所谓的操作(而不是按f12键)。
此外,document.addEventListener
将新的侦听器添加到当前现有的侦听器中。因此,处理按键的主要功能和您添加的功能将同时运行(在这种情况下仍将调用原始保存功能)。
答案 3 :(得分:-1)
Onclick可以阻止默认操作。
document.addEventListener('keypress', function(e) {
if (event.keyCode == 16 && event.keyCode == 18 && event.keyCode == 83) {
e.preventDefault();
}
});