我正在使用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"
}
}
}
答案 0 :(得分:0)
您可以将browser.webRequest.onHeadersReceived.addListener
的第二个参数从{urls: ["<all_urls>"]}
更改为{url: ["<all_urls>"], types: ["main_frame"]}
。
这意味着您只会在没有页面上所有资源的情况下获得顶级“框架”加载的事件。
加载到标签中的顶级文档。
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType