如果清单 v3 中不允许当前选项卡 url,则防止弹出
Prevent popup if current tab url is not permitted in manifest v3
我正在编写一个 chrome 扩展,我想完全禁用弹出窗口,或者如果 v3 清单的 [= 不允许当前选项卡的 url,则显示一条消息14=] 属性.
这是一个开发支持工具,我们不希望在生产环境中启用它 url。所以如果我设置:
"host_permissions": [
"http://localhost:3000/",
"https://*.dev.some-site.com/",
"https://www.uat.some-site.com/"
]
...然后,如果用户在 www.some-site.com(或其他任何地方),我希望禁用弹出窗口。
我可以很容易地获得相关的url:
let [currentTab] = await chrome.tabs.query({ active: true, currentWindow: true });
const { url } = currentTab;
const cookieUrl = url.match(/https?:\/\/[^/]+\//)?.[0];
...我可以使用
获得允许的文件模式数组
chrome.runtime.getManifest().host_permissions
但是我如何使用这个 或其他任何东西 来防止弹出窗口?此外,将该通配符转换为真正的正则表达式会有点麻烦。难道没有一些开箱即用的方法可以做到这一切吗??
使用 chrome.declarativeContent API 为 host_permissions
中的站点启用操作弹出窗口,并在其他地方默认禁用它。
禁用时,图标变为灰色。单击它将显示内置的上下文菜单,chrome.action.onClicked 不会被触发。拼图菜单中的扩展名也变灰了
manifest.json:
"action": {"default_icon": "icon.png"},
"permissions": ["declarativeContent"],
后台脚本:
chrome.action.disable();
chrome.runtime.onInstalled.addListener(() => {
chrome.declarativeContent.onPageChanged.removeRules(() => {
chrome.declarativeContent.onPageChanged.addRules([{
conditions: chrome.runtime.getManifest().host_permissions.map(h => {
const [, sub, host] = h.match(/:\/\/(\*\.)?([^/]+)/);
return new chrome.declarativeContent.PageStateMatcher({
pageUrl: sub ? {hostSuffix: '.' + host} : {hostEquals: host},
});
}),
actions: [new chrome.declarativeContent.ShowAction()],
}]);
});
});
为简单起见,我不限制PageStateMatcher的schemes。
我正在编写一个 chrome 扩展,我想完全禁用弹出窗口,或者如果 v3 清单的 [= 不允许当前选项卡的 url,则显示一条消息14=] 属性.
这是一个开发支持工具,我们不希望在生产环境中启用它 url。所以如果我设置:
"host_permissions": [
"http://localhost:3000/",
"https://*.dev.some-site.com/",
"https://www.uat.some-site.com/"
]
...然后,如果用户在 www.some-site.com(或其他任何地方),我希望禁用弹出窗口。
我可以很容易地获得相关的url:
let [currentTab] = await chrome.tabs.query({ active: true, currentWindow: true });
const { url } = currentTab;
const cookieUrl = url.match(/https?:\/\/[^/]+\//)?.[0];
...我可以使用
获得允许的文件模式数组chrome.runtime.getManifest().host_permissions
但是我如何使用这个 或其他任何东西 来防止弹出窗口?此外,将该通配符转换为真正的正则表达式会有点麻烦。难道没有一些开箱即用的方法可以做到这一切吗??
使用 chrome.declarativeContent API 为 host_permissions
中的站点启用操作弹出窗口,并在其他地方默认禁用它。
禁用时,图标变为灰色。单击它将显示内置的上下文菜单,chrome.action.onClicked 不会被触发。拼图菜单中的扩展名也变灰了
manifest.json:
"action": {"default_icon": "icon.png"},
"permissions": ["declarativeContent"],
后台脚本:
chrome.action.disable();
chrome.runtime.onInstalled.addListener(() => {
chrome.declarativeContent.onPageChanged.removeRules(() => {
chrome.declarativeContent.onPageChanged.addRules([{
conditions: chrome.runtime.getManifest().host_permissions.map(h => {
const [, sub, host] = h.match(/:\/\/(\*\.)?([^/]+)/);
return new chrome.declarativeContent.PageStateMatcher({
pageUrl: sub ? {hostSuffix: '.' + host} : {hostEquals: host},
});
}),
actions: [new chrome.declarativeContent.ShowAction()],
}]);
});
});
为简单起见,我不限制PageStateMatcher的schemes。