【问题标题】:chrome.tabs.executeScript only seems to execute in the active tabchrome.tabs.executeScript 似乎只在活动选项卡中执行
【发布时间】: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 代替。
  • 是的,我也在玩一些内容脚本。似乎如果我开始打开标签,一切都会在我活跃的地方运行,尽管我希望它继续在一个标签上运行。我也很容易在内容脚本中遗漏一些东西。

标签: google-chrome-extension


【解决方案1】:

所以,@wOxxOm 引导我找到了我需要的东西。我确实需要一个内容脚本,而我认为我没有看到预期结果的原因是我未能删除并重新添加我的扩展程序。有时它似乎尊重所做的更改,但也许当您对清单进行更改时,您需要删除并重新添加扩展。

一旦我这样做了,它就可以在非活动选项卡上正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 2022-01-14
    • 2019-12-09
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多