使用Chrome扩展程序根据模式拦截网址



场景:

  • 根据模式过滤一些重定向网址
  • 显示一条消息,指出 URL 因重定向而被阻止
  • 如果上一个请求被阻止,则在同一选项卡中"取消阻止"请求

我在webRequest.onBeforeRequest中使用的URL模式列表包含bit.ly。然后我点击了重定向到 google.com 的 URLbit.ly/2qlHCT。在这种情况下,我将显示一条类似"请求被阻止"的消息,但我不想通过在 onBeforeRequest 的回调中返回 { cancel: true } 来实际阻止请求。

如果用户尝试在同一选项卡中正常访问 google.com,那么我将显示一条消息"未阻止任何内容"。 因此,当您为特定域添加过滤器时,这与Adblock的作用类似。如果允许域,则 Adblock 的图标变为绿色,否则它将变为红色。

我知道我可以使用 chrome.storage 来保存有关被阻止请求的信息,但是当 URL 模式不匹配时,我该如何实现呢?

解决方案非常简单。我正在使用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));
}

然后,我只是将功能块请求作为侦听器添加到chrome.webRequest.onBeforeRequest和一些过滤器中。

chrome.webRequest.onBeforeRequest.addListener(blockRequest, { urls: filters, types: ['main_frame'] });

相关内容

  • 没有找到相关文章

最新更新