Как ограничить SecurityInfo.появляться только один раз для корневого домена для каждого попадания URL - PullRequest
0 голосов
/ 14 февраля 2019

Я использую 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, я хочу узнать статус HSTS для google.com.Если я снова введу новый адрес в той же вкладке, скажем, yahoo.com, мне будет интересно узнать SecurityInfo для yahoo.com.

Если я открою новую вкладку для google.com, я хочу эту информациюснова появиться как новая вкладка, несмотря на то, что я видел ее на предыдущей вкладке.

Т.е. меня интересует только информация SecurityInfo корневого домена (не поддоменов) один раз для каждого попадания URL.

А, 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"
    }
  }
}

1 Ответ

0 голосов
/ 14 февраля 2019

Вы можете изменить второй аргумент browser.webRequest.onHeadersReceived.addListener с {urls: ["<all_urls>"]} на {url: ["<all_urls>"], types: ["main_frame"]}.Это означает, что вы получите событие только для загрузки "frame" верхнего уровня без всех ресурсов на странице.

Документы верхнего уровня, загруженные во вкладку.

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

...