DOMContentLoaded事件无法捕获Chrome内容脚本中子框架的加载

时间:2015-07-16 07:30:39

标签: javascript google-chrome-extension firefox-addon

我在Firefox扩展中使用DOMContentLoaded事件来捕获一个标签窗口中每个子帧的加载事件。

但在Chrome内容脚本中,我使用

document.addEventListener("DOMContentLoaded", function(evt){console.log('domcontentloaded!')}, true);

它不起作用,它只能捕获顶部窗口的加载事件。

Firefox和Chrome之间有什么不同吗?

1 个答案:

答案 0 :(得分:2)

此代码应该如您所描述的那样在顶部框架中执行,即使在Firefox中也是如此。

实现这一目标的最简单方法是在每一帧中注入内容脚本。

可能不同之处在于Firefox默认情况下会这样做;在Chrome中,这是可选的。由于控制台是在框架/上下文之间共享的,因此您会得到(假!)它来自顶部框架中的代码的印象。

在清单中:

"content_scripts" : [
  {
    "matches" : ["<all_urls>"],
    "js" : ["content.js"],
    "all_frames" : true,
    "run_at" : "document_start"
  }
]

注意:我也将"document_start"置于其中,因为默认情况下,您的脚本会在之后注入(因此您无法保证抓住它)。有关详细信息,请参阅run_at parameter docs

使用executeScript

chrome.tabs.executeScript({file: "content.js", all_frames: true});