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

How to call the original JavaScript function which has been overridden by an extension first?

有一个 Firefox 扩展通过

修改本机 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 之前,扩展程序已选择 运行(即扩展程序 运行ning 在 document_start)。如果他们愿意,扩展首先获得 运行 代码。这是因为浏览器是 designed/intended。如果扩展更改了原型,您将无法直接访问已被覆盖的功能。

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

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

之外,您无法影响是否执行默认操作

您所能做的就是检测到 .preventDefault() 方法已被覆盖,并提醒用户您的网站无法使用该扩展程序正常运行 installed/active。在这种情况下,当方法尚未被覆盖。