如何限制 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
我正在使用 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
.
如果我为 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