从浏览器扩展覆盖 JavaScript 功能

Override JavaScript function from browser extension

我正在创建 a web extension 以帮助检测网站中的 postMessage activity。因此,我想在页面附加 message 事件侦听器时检测它,例如通过调用此代码:

window.addEventListener("message", ...)

显然无法获得事件侦听器列表。我的下一个想法是覆盖 addEventListener,这样我就可以检测到对它的调用:

window.addEventListener = function(type) {
    if (type == "message") {
        // do something
    }
}

我无法将此代码注入页面:

如何从我的扩展中全局覆盖 window.addEventListener?或者,是否有另一种方法来检测 message 事件的事件侦听器?

要覆盖某个函数,您需要在页面加载前 运行 JavaScript。您需要执行以下操作:

  • 在 manifest.json 中,通过将 run_at 设置为 document_start,在加载文档之前指定内容脚本为 运行。
  • 从内容脚本中,将静态代码注入页面。不要使用 URL,而是创建一个包含代码的脚本标签。 IE。 script.textContent = actualCode 而不是 script.src = url.