我在Chrome扩展程序代码中使用InjectDetails
对象。我对runAt
字段中提到的文件感到困惑。
runAt ( optional enum of "document_start", "document_end", or "document_idle" )
这里提到哪个文件?可能的选择是: -
我该如何验证?
答案 0 :(得分:4)
如果allFrames
为true
,则“文档”仅指顶级文档。
否则,它引用每个匹配帧的文档(例如,顶层,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.executeScript
(runAt
,allFrames
)的camelCased,但在清单文件(run_at
,all_frames
)中拼写为下划线。