我正在尝试编写一个用户脚本来阻止全局键盘事件的所有 .preventDeault()
调用,并使用我自己的热键,而不是被迫使用不同网站定义的热键。问题是我无法弄清楚如何在不查看具体网站代码的情况下解除类似的绑定(bind)。我不想阻止所有 JS - 只是那些应该由我而不是开发人员控制的东西 - 但我不明白如何使其变得简单和全局。
最佳答案
禁用防止网站代码默认的功能可能会导致该网站不稳定并可能无法使用。
您可以在 KeyboardEvent
(它是 UIEvent
的子类,它是 Event 的子类)上创建
其中实现了标准 preventDefault
的重写preventDefault
),如下所示:
KeyboardEvent.prototype.preventDefault = function() { };
(Event
的 preventDefault
上的 writable
、enumerable
和 configurable
标志code> 都是 true
,所以这里不需要 Object.defineProperty
。)
示例:
KeyboardEvent.prototype.preventDefault = function() { };
// This event handler *should* prevent typing in the input, but doesn't because we've broken preventDefault
document.getElementById("the-input").addEventListener("keydown", function(e) {
e.preventDefault();
}, false);
<input id="the-input" type="text">
将其与未覆盖 preventDefault
的版本进行比较:
// This event handler prevents typing in the input, because we haven't broken preventDefault
document.getElementById("the-input").addEventListener("keydown", function(e) {
e.preventDefault();
}, false);
<input id="the-input" type="text">
这可能有效,至少对于一部分现代浏览器来说是这样,但我再次强烈建议不要这样做。
关于javascript - 到处禁止 .preventDefault(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52244121/