【问题标题】:How to Detect a New Chrome Session in Extension如何检测扩展中的新 Chrome 会话
【发布时间】:2023-01-10 10:25:36
【问题描述】:

我有一个扩展需要检测新的 Chrome 会话何时开始。我在这里找到了一个建议如下的帖子:

chrome.runtime.onStartup.addListener(async function() {
   console.log("new startup detected");
   await chrome.storage.local.set({"status":false});
});

但是,听众似乎不起作用。也不清楚它指的是什么初创公司。启动 Chrome 或启动扩展程序。有人可以阐明如何检测新 chrome 何时启动吗? TIA。

更新代码

chrome.windows.onCreated.addListener(async function() {
   console.log("new startup detected");
   await chrome.storage.local.set({"status":false});
});

更新清单

{
   "manifest_version": 3,

   "name": "Auto_Select",
   "description": "This extension auto selects Mturk HITs",
   "version": "1.0.12",

   "action": {
     "default_icon": "auto_select.png",
     "type": "module",
     "default_popup": "auto_select.html"
   },
   "permissions": [
     "tabs",
     "activeTab",
     "storage",
     "contextMenus",
     "tts"
   ],
   "host_permissions": [
      "<all_urls>"
   ],
   "background": {
   "service_worker": "auto_select.js"
  },
  "content_security_policy": {
     "extension_pages": "script-src 'self'; object-src 'self'; script-src-elem 'self'"
  }
}

【问题讨论】:

  • chrome.storage.session 应该可以解决你的问题,如果我理解正确的话。检查是否存在虚拟密钥,如果不存在,则创建它。
  • “Chrome 会话”在您的扩展程序中究竟意味着什么?这是一个非常重载的术语。
  • 我的意思是 Chrome 的新执行。

标签: google-chrome google-chrome-extension startup


【解决方案1】:

我假设你想检测一个新会话的开始,并且你想在 service worker 中检测它。

这就是为什么你应该使用恰当命名的chrome.storage.session

以下扩展在 chrome.storage.session 中获取并设置一个虚拟密钥以检测新会话的开始。

如何验证扩展是否正常工作:

  1. 加载扩展
  2. 检查服务人员。
  3. 控制台应该显示文本“session has started”。
  4. 关闭 DevTools 窗口,这样 service worker 就不会保持活动状态。
  5. 等待服务工作者变为非活动状态。
  6. 再次检查 service worker。
  7. 控制台现在应显示文本“会话已在运行”。
  8. 如果您关闭 Chrome 并再次打开,Service Worker 控制台应再次显示文本“会话已启动”。

    清单.json

    {
        "manifest_version": 3,
        "name": "Detect Session Start",
        "version": "1.0.0",
        "permissions": [
            "storage"
        ],
        "background": {
            "service_worker": "background.js"
        }
    }
    

    背景.js

    (async () => {
        let { started } = await chrome.storage.session.get("started");
        if (started === undefined) {
            console.log("session has started");
            await chrome.storage.session.set({ started: true });
        }
        else {
            console.log("session is already running");
        }
    })();
    

【讨论】:

    【解决方案2】:

    你需要使用chrome.windows.onCreated.

    chrome.runtime.onStartup

    当安装了此扩展的配置文件首次启动时触发。

    chrome.windows.onCreated

    创建窗口时触发。

    清单.json

    {
      "name": "hoge",
      "version": "1.0",
      "manifest_version": 3,
      "permissions": ["storage"],
      "background": {
        "service_worker": "background.js"
      }
    }
    

    【讨论】:

    • 你能给我们一些示例代码吗?
    • 我已经根据您的建议更新了 OP。不幸的是,它现在似乎挂起,但我不确定在哪里,因为控制台是空的。我想知道是否是异步导致的。
    • @Wt Riker,我编辑了我的答案。请发布您的 manifest.json。
    • OP 更新为 Manifest。
    • @Wt Riker,我使用了您的 manifest.json,但它在我的环境中正常工作。尝试使用我的 manifest.json。
    猜你喜欢
    • 2021-03-12
    • 1970-01-01
    • 2022-12-17
    • 2011-02-21
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多