chrome扩展InjectDetails中文档的含义

时间:2013-05-20 10:45:03

标签: javascript google-chrome-extension document

我在Chrome扩展程序代码中使用InjectDetails对象。我对runAt字段中提到的文件感到困惑。

以下是documentation

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

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

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

我该如何验证?

1 个答案:

答案 0 :(得分:4)

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

您可以在Content scripts文档中找到有关run_at的更多信息:

run_at    string
     

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

     

对于“document_start”,文件是在css的任何文件之后注入的,但是在构造任何其他DOM或运行任何其他脚本之前。

     

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

     

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

     

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

PS。属性名称为chrome.tabs.executeScriptrunAtallFrames)的camelCased,但在清单文件(run_atall_frames)中拼写为下划线。