我在Firefox扩展中使用DOMContentLoaded事件来捕获一个标签窗口中每个子帧的加载事件。
但在Chrome内容脚本中,我使用
document.addEventListener("DOMContentLoaded", function(evt){console.log('domcontentloaded!')}, true);
它不起作用,它只能捕获顶部窗口的加载事件。
Firefox和Chrome之间有什么不同吗?
答案 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});