情景:
我在webRequest.onBeforeRequest中使用的网址格式列表包含 bit.ly 。然后我点击了网址 bit.ly/2qlHCT ,重定向到google.com。在这种情况下,我会显示一条消息,例如"请求被屏蔽"但我不想通过在onBeforeRequest'中返回{cancel:true}来实际阻止请求回调。
如果用户尝试在同一标签中正常访问google.com,那么我会显示一条消息"没有任何内容被阻止"。 因此,这与Adblock为特定域添加过滤器时的功能类似。如果允许域名,Adblock的图标会变为绿色,否则会变为红色。
我知道我可以使用chrome.storage来保存有关被阻止请求的信息,但是当URL模式不匹配时我该如何实现呢?
答案 0 :(得分:0)
解决方案非常简单。我使用chrome.tabs.query
来阻止标签,但这是一种异步方法,我需要同步响应。使用localStorage
就可以了。
function blockRequest(tabId) {
let tabs = localStorage.blocked_tabs;
tabs = (tabs !== undefined) ? JSON.parse(tabs) : [];
tabs = tabs.filter(function (item) {
return item !== tabId;
});
localStorage.setItem('blocked_tabs', JSON.stringify(tabs));
}
然后,我刚刚将函数blockRequest添加为chrome.webRequest.onBeforeRequest
和一些过滤器的监听器。
chrome.webRequest.onBeforeRequest.addListener(blockRequest, { urls: filters, types: ['main_frame'] });