Firefox扩展程序通过
修改本机preventDefault
功能
Object.defineProperty(Event.prototype, 'preventDefault', ...
在我的JavaScript脚本执行之前。因此,当我调用preventDefault
函数时,将调用修改后的函数而不是原始函数。扩展名更改了函数的行为。
对我来说,有两种方法可以绕过扩展程序:
在执行扩展程序之前获取本机的preventDefault函数,但是我的脚本总是在扩展后执行,即使我将脚本放在head标记中。
自己实施preventDefault功能,但我不知道该怎么做。
或者这是另一种替代方式?
答案 0 :(得分:0)
- 在扩展执行之前获取本机的preventDefault函数,但是我的脚本总是在扩展后执行,即使我将脚本放在head标签中。
醇>
这是不可能的。扩展程序选择在加载HTML之前运行(即扩展程序在document_start
运行)。如果他们愿意,扩展可以先运行代码。这是浏览器的设计/意图。如果扩展名更改原型,您将无法直接访问已被覆盖的函数。
- 自己实现preventDefault函数,但我不知道如何。
醇>
基本上,你不能。 .preventDefault()
方法可以影响表示事件的浏览器内部数据结构,导致浏览器不调用默认操作。即使从DOM中删除元素也不会阻止默认操作。除了调用.preventDefault()
之外,如果不采取默认操作,您无法影响。
您可以做的就是检测到.preventDefault()
方法已被覆盖,并提醒用户您的网站在安装/活动的扩展程序中无法正常运行。在这种情况下,您可能会检测到.preventDefault()
方法已被更改,方法是将Event.prototype.preventDefault.toString()
返回的内容与您希望在方法未被覆盖时返回的内容进行比较。