【发布时间】:2020-06-03 19:20:23
【问题描述】:
我在 background.js 中有以下代码。
chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) {
if (changeInfo.status == 'complete') {
chrome.tabs.executeScript(tabId, {
file: 'inject.js'
});
} // if (changeInfo.status == 'complete') {
});
但是当我更改选项卡时,即使更新了非活动选项卡,inject.js 也只会在活动选项卡中运行。在inject.js 中,我有一个针对特定网站运行的自动化进程,它正在单击一些页面以查找特定文本。即使我打开一个新选项卡,我也希望它继续在该选项卡上运行。但是一旦我更改标签,注入只会发生在活动标签上。我认为 tab.tabId 或 tabId 将用于已更新的选项卡,但它似乎始终是活动选项卡。
有没有办法找出更新了哪个选项卡,以便我可以将正确的 tabId 传递给 executeScript?
这是我的清单的样子:
{
"name": "Automated test",
"version": "0.0.1",
"manifest_version": 2,
"background": {
"scripts": [
"background.js"
],
"persistent": true
},
"browser_action": {
"default_title": "Test"
},
"permissions": [
"https://*/*",
"http://*/*",
"tabs",
"webNavigation"
]
}
【问题讨论】:
-
不,executeScript 在它应该运行的地方运行。问题是站点脚本在非活动选项卡中停止。顺便说一句,如果你只有这个 onUpdated 代码,你可以简单地 declare a content script 代替。
-
是的,我也在玩一些内容脚本。似乎如果我开始打开标签,一切都会在我活跃的地方运行,尽管我希望它继续在一个标签上运行。我也很容易在内容脚本中遗漏一些东西。