Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在背景页面中是否有一个与“run_at:start”等价的词?_Javascript_Google Chrome Extension - Fatal编程技术网

Javascript 在背景页面中是否有一个与“run_at:start”等价的词?

Javascript 在背景页面中是否有一个与“run_at:start”等价的词?,javascript,google-chrome-extension,Javascript,Google Chrome Extension,在加载的页面上执行任何其他代码之前,我需要运行一些JavaScript代码 使用以下内容脚本可以很好地工作: { "matches": ["http://*/*", "https://*/*", "file://*/*"], "js": ["contentScript.js"], "run_at": "document_start" } 但现在我只想在用户通过单击浏览器操作按钮选择的某些页面上运行内容脚本 我试着听chrome.tabs.onUpdate,然后调用executeSc

在加载的页面上执行任何其他代码之前,我需要运行一些JavaScript代码

使用以下内容脚本可以很好地工作:

{
  "matches": ["http://*/*", "https://*/*", "file://*/*"],
  "js": ["contentScript.js"],
  "run_at": "document_start"
}
但现在我只想在用户通过单击浏览器操作按钮选择的某些页面上运行内容脚本

我试着听
chrome.tabs.onUpdate
,然后调用
executeScript
,但在我的内容脚本之前,页面上正在运行其他代码

有没有办法确保后台页面注入的代码在其他代码之前运行


我也可以在我的内容脚本中添加一个条件,但这意味着我需要访问当前选项卡ID和激活扩展的所有选项卡的列表。

根据文档,有几个有用的参数,包括
runAt
(默认情况下,它是
document\u idle
,发生在DOMContentLoaded事件之后),因此要尽快注入脚本,请使用
runAt:'document\u start'

chrome.tabs.executeScript(tabId, {
    runAt: 'document_start',
    code: 'console.log(document.documentElement.innerHTML);',
});

请注意,DOM树在此阶段通常为空,特别是如果您从早期执行的事件侦听器(如tabs.OnUpdate或webNavigation.onCommitted)进行注入。甚至头部或身体元素可能仍然不存在,因此您必须使用
(document.HEAD | document.documentElement)
回退作为任何添加节点的容器,如

,根据文档,有几个有用的参数,包括
runAt
(默认情况下,它是
document\u idle
,发生在DOMContentLoaded事件之后),因此要尽快注入脚本,请使用
runAt:'document\u start'

chrome.tabs.executeScript(tabId, {
    runAt: 'document_start',
    code: 'console.log(document.documentElement.innerHTML);',
});

请注意,DOM树在此阶段通常为空,特别是如果您从早期执行的事件侦听器(如tabs.OnUpdate或webNavigation.onCommitted)进行注入。甚至头部或身体元素可能仍然不存在,因此您必须使用
(document.HEAD | document.documentElement)
回退作为任何添加节点的容器,如

@wOxxOm-Nice,没有看到。对我来说效果很好。如果你发布一个,很乐意接受作为答案。@wOxxOm-Nice,没有看到。对我来说效果很好。如果发布一个,很乐意接受作为答案。注意:使用
runAt:'document\u start'的实际性能de>与manifest.json
“run_at”相比:“document_start”
将在很大程度上取决于您何时执行
选项卡。executeScript()
与加载页面的过程有关。实际上,使用
runAt:'document\u start'
实际上意味着脚本的注入不会故意延迟到
tabs.executeScript()运行之后。它不保证在加载页面之前注入脚本(即,
head
body
null
,使用manifest.json选项可以保证)。注意:使用
runAt:'document\u start'
的实际性能与manifest.json
的“run\u at”相比:“document\u start”
在很大程度上取决于您何时执行
选项卡。executeScript()
与加载页面的过程有关。实际上,使用
runAt:'document\u start'
实际上意味着脚本的注入不会故意延迟到
tabs.executeScript()运行之后。它不保证在加载页面之前注入脚本(即,
head
body
null
,使用manifest.json选项可以保证)。