禁止.preventDefault()无处不在

问题描述 投票:1回答:1

我正在尝试编写一个用户脚本来阻止所有.preventDeault()全局调用键盘事件并使用我自己的热键而不是被迫使用不同网站定义的那些。问题是我无法弄清楚如何在不查看具体网站代码的情况下解开类似的东西。我不想阻止所有JS - 只是应该由我控制的东西而不是开发人员 - 但我不明白如何使它变得简单和全局。

javascript javascript-events userscripts preventdefault
1个回答
1
投票

禁用阻止网站代码默认的能力可能会使该网站不稳定并且可能无法使用。

您可以在preventDefault(它是KeyboardEvent的子类,它是UIEvent的子类,其中实现标准Event)上创建preventDefault的覆盖,如下所示:

KeyboardEvent.prototype.preventDefault = function() { };

writableenumerable上的configurableEventpreventDefault标志都是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">

这可能有用,至少对于现代浏览器的子集来说,但是我再次强烈建议不要这样做。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.