javascript - 到处禁止 .preventDefault()

标签 javascript dom-events userscripts preventdefault

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

最佳答案

禁用防止网站代码默认的功能可能会导致该网站不稳定并可能无法使用。

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

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

(EventpreventDefault 上的 writableenumerableconfigurable 标志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/

相关文章:

javascript - 在用户脚本中使用谷歌翻译 API

javascript - tampermonkey 中的 "instant inject"是如何工作的?

javascript - 搜索句号并随机决定在 50% 的时间后添加一个词

JavaScript:如何使用正则表达式从字符串中删除空行?

javascript - React.js : e. PreventDefault(…) 不是一个函数

javascript - window.open 在 IE7-8-9b 中抛出无效参数

javascript - 是否有可能两个异步 Javascript 函数实例同时执行两个代码块?

javascript - "Uncaught SyntaxError: Unexpected token ("但没有错误

javascript - 使用 jquery.html() 函数将文本分配给 div 时如何在 div 中显示多行文本

javascript - 使用变量来控制事件