2

InjectDetails在我的 chrome 扩展代码中使用对象。我对runAt字段中提到的文件有点困惑。

这是来自文档的片段

runAt ( optional enum of "document_start", "document_end", or "document_idle" )

这里提到的是哪个文件?可能的选择是:-

  • 原始文档(在浏览器中加载的父框架)。
  • 将在其中注入 JS/Css 的文档。(原始文档中可能有多个 iframe)
  • 以 background.html 形式在后台运行的文档

我应该如何验证这一点?

4

1 回答 1

5

如果allFramestrue,那么“文档”仅指顶级文档。
否则,它引用每个匹配框架的文档(例如顶级,iframe)。

run_at您可以在内容脚本文档中找到更多信息:

run_at    string

选修的。控制何时js注入文件。可以是“document_start”、“document_end”或“document_idle”。默认为“document_idle”。

在 "document_start" 的情况下,文件是在来自 的任何文件之后注入的css,但在构造任何其他 DOM 或运行任何其他脚本之前。

在“document_end”的情况下,文件在 DOM 完成后立即注入,但在图像和框架等子资源加载之前。

window.onload在“document_idle”的情况下,浏览器选择一个时间在“document_end”之间和事件触发后立即注入脚本。注入的确切时刻取决于文档的复杂程度和加载时间,并针对页面加载速度进行了优化。

注意:使用“document_idle”,内容脚本可能不一定会收到window.onload事件,因为它们可能会在它已经触发后运行。在大多数情况下,对于在“document_idle”运行的内容脚本来说,监听onload事件是不必要的,因为它们保证在 DOM 完成后运行。如果您的脚本确实需要在 之后运行,您可以使用该属性window.onload检查是否已触发 onload 。document.readyState

PS。属性名称为chrome.tabs.executeScript( runAt, allFrames) 的驼峰式命名法,但在清单文件 ( run_at, all_frames) 中使用下划线拼写。

于 2013-05-20T10:51:50.007 回答