根据Chrome扩展程序

时间:2017-05-26 01:47:39

标签: javascript google-chrome google-chrome-extension adblock

情景:

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

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

如果用户尝试在同一标签中正常访问google.com,那么我会显示一条消息"没有任何内容被阻止"。 因此,这与Adblock为特定域添加过滤器时的功能类似。如果允许域名,Adblock的图标会变为绿色,否则会变为红色。

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

1 个答案:

答案 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'] });