覆盖浏览器扩展程序

时间:2018-02-15 14:34:20

标签: javascript google-chrome-extension override firefox-webextensions

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

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

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

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

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

  • 内容脚本可以访问每个页面的DOM,但不能访问窗口对象。更改内容页面上的window.addEventListener对实际页面没有影响。
  • 我可以通过修改DOM来添加脚本元素,但是我无法正确计时。我的脚本需要在任何其他脚本之前运行,并且此方法仅在已存在DOM时才有效。
  • chrome.tabs.executeScript等函数在特定选项卡上工作,我想在每个页面上运行代码。如果页面包含iframe,我也想要覆盖addEventListener。
  • ,这会有所不同

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

1 个答案:

答案 0 :(得分:1)

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

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