如何限制 SecurityInfo.每个 URL 命中每个根域只出现一次

How to limit the SecurityInfo. to appear only once per root domain per URL hit

我正在使用 webExtension SecurityInfo API。例如,我想查看是否启用了 HSTS。我只想知道这个信息。每个选项卡一次。例如,在这段代码中,我想检查是否启用了 HSTS。

background.js:

sync function logger(details) {
  try {
    let securityInfo = await browser.webRequest.getSecurityInfo(
      details.requestId, {}
    );
    console.log("URL",details.url)

    if ((securityInfo.state == "secure" || securityInfo.state == "weak") &&
        !securityInfo.isUntrusted) {
        console.log("HSTS:",securityInfo.hsts)
    }
  }
  catch(error) {
    console.error(error);
  }
}

browser.webRequest.onHeadersReceived.addListener(logger,
  {urls: ["<all_urls>"]},
  ["blocking"]
);

当我打开 google.com 时,我在 browser console 中收到许多针对 google.com 链接或同一页面中嵌入链接的回复。

我只对 SecurityInfo 感兴趣。对于 URL 的根域,我点击了 URL 栏。没有其他的。例如,如果我点击 mail.google.com,我想知道 google.com 的 HSTS 状态。如果我再次在同一选项卡中输入新地址,例如 yahoo.com,我想知道 yahoo.com.

的 SecurityInfo

如果我为 google.com 打开一个新标签,我希望此信息再次出现,因为它是一个新标签,尽管我在上一个标签中看到了它。

即我只对每次 URL 命中了解一次根域(不是子域)的 SecurityInfo 感兴趣。

而且,manifest.json

{
  "manifest_version": 2,
  "name": "Example",
  "description": "Example.",
  "version": "0.1.0",
  "browser_action": {
    "default_icon": {
      "32": "icons/icon-32.png"
    },
    "default_title": "Example",
    "default_popup": "popup.html"
  },
  "permissions": ["webRequest", "webRequestBlocking", "<all_urls>"],
  "background": {
    "scripts": [ "background.js" ]
  },
  "icons": {
    "32": "icons/icon-32.png"
  },
  "applications": {
    "gecko": {
      "strict_min_version": "62.0b5"
    }
  }
}

您可以将 browser.webRequest.onHeadersReceived.addListener 的第二个参数从 {urls: ["<all_urls>"]} 更改为 {url: ["<all_urls>"], types: ["main_frame"]}。 这意味着您只会获得顶级 "frame" 加载的事件,而页面上没有所有资源。

Top-level documents loaded into a tab.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType