Greasemonkey 不允许扩充 Element.prototype,说 "not a function"

Greasemonkey doesn't allow to augment Element.prototype, saying "not a function"

我需要在我的用户脚本中的 Element.prototype 中定义一个方法,但是当我尝试那样做时,我得到了奇怪的错误:

// ==UserScript==
// <...>
// @grant        none
// ==/UserScript==

;[Element.prototype, Text.prototype].forEach(e => {
  e.findParent = function(selector) {
    let node = this
    while(node && !node.matches(selector)) {
      node = node.parentNode
      if (! node.matches) return null;
    }
    return node
  }
}

[...].forEach(...) is not a function

function augmentPrototype(e) {
  e.findParent = function(selector) {
    /* <...> */
  }
}
augmentPrototype(Element.prototype)

augmentPrototype is not a function

(e => {
  e.findParent = function(selector) {
    /* <...> */
  }

})(Element.prototype)

(intermediate value)(...) is not a function

似乎无论在 Element.prototype 上调用什么函数,它都会立即变成 "not a function" 到 Greasemonkey,甚至 [].forEach

普通的Firefox控制台没有这个问题。我也修改了 Event.prototype,它工作正常。

更新:Firefox 的 Tampermonkey 也有同样的问题,所以这不仅仅是 Greasemonkey 的问题。

对不起,虚惊一场。事实证明,在我的代码旁边,我有一个以 (... 开头的立即调用函数,而且我不使用分号。 IIF 之前的前导分号解决了问题。显然,自动分号插入在 Firefox 中的工作方式略有不同,因为它在 Chrome.

中工作正常