I am working on a Chrome extension with Manifest V3, which aims to limit the number of tabs open on a specific domain to improve the performance of a web application.
chrome.webRequest.onBeforeRequest.addListener(async function (details) {
if (details.url.includes("dominio")) {
const tabs = await chrome.tabs.query({ url: ["dominio"] });
const max_tabs_open = tabs.length > 2;
const flagBlockUrl = await getFlagBlockUrl();
if (max_tabs_open && !flagBlockUrl) {
chrome.storage.session.set({ flagBlockUrl: true });
chrome.declarativeNetRequest.updateDynamicRules({
addRules: [
{ id: 1, action: { type: 'block' }, condition: { urlFilter: 'XXX', resourceTypes: ['main_frame'] } }
]
});
} else if (!max_tabs_open && flagBlockUrl) {
chrome.storage.session.set({ flagBlockUrl: false });
chrome.declarativeNetRequest.updateDynamicRules({ removeRuleIds: [1] });
}
}
}, { urls: ["dominio"] }, undefined);
async function getFlagBlockUrl() {
const flag = await chrome.storage.session.get("flagBlockUrl");
return flag == {} ?
false : flag.flagBlockUrl != undefined ?
flag.flagBlockUrl : false;
}