javascript - 如何先调用已被扩展覆盖的原始 JavaScript 函数?

标签 javascript firefox preventdefault firefox-addon-webextensions eventhandler

有一个 Firefox 扩展可以通过以下方式修改 native preventDefault 函数

Object.defineProperty(Event.prototype, 'preventDefault', ...

在我的 JavaScript 脚本执行之前。因此,当我调用 preventDefault 函数时,将调用修改后的函数而不是原始函数。函数的行为由扩展更改。

对我来说,有两种方法可以绕过扩展:

  1. 在扩展执行之前获取原生的 PreventDefault 函数,但即使我将脚本放在 head 标记中,我的脚本也总是在扩展之后执行。

  2. 自己实现了preventDefault函数,但不知道如何实现。

或者这是一些替代方法?

最佳答案

  1. Get the native preventDefault function before the extension executed, but my script always executed after the extension even I put my script in head tag.

这是不可能的。该扩展程序选择在加载 HTML 之前运行(即该扩展程序在 document_start 处运行)。如果扩展需要的话,它们首先可以运行代码。这是浏览器的设计/意图。如果扩展更改了原型(prototype),您将无法直接访问已被覆盖的函数。

  1. Implement the preventDefault function by myself, but I don't know how to.

基本上,你不能。 .preventDefault() 方法可以影响表示事件的浏览器内部数据结构,从而导致浏览器不调用默认操作。即使从 DOM 中删除元素也不会阻止默认操作。除了调用 .preventDefault() 之外,您无法影响是否执行默认操作。

您所能做的就是检测 .preventDefault() 方法是否已被覆盖,并提醒用户您的网站在安装/激活该扩展后无法正常运行。在这种情况下,您可能可以通过将 Event.prototype.preventDefault.toString() 返回的内容与当该方法未被重写时,您期望它返回什么。

关于javascript - 如何先调用已被扩展覆盖的原始 JavaScript 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44411618/

相关文章:

email - 微软 Jscript 电子邮件模块?

firefox - XBAP 与 FireFox 和 Windows 7

javascript - 在 Django 中使用 javascript 获取 anchor 元素 ID

javascript - Ajax 正在缓存表单 onclick 的先前输出

.net - Clickonce:setup.exe 在浏览器中打开 .application 文件。普通的?

forms - Firefox 操作保存的表单数据

单击 ul li a href 时的 JavaScript - 防止默认不起作用

jQuery 捕获回车键并防止默认

javascript - 如何使用 Vanilla JS 在事件监听器中禁用 preventDefault

javascript - 文件上传/预览,无法更改图像尺寸