Chrome扩展程序可有效阻止域名

时间:2013-04-02 13:31:23

标签: google-chrome google-chrome-extension

我正在制作一个非常简单的Chrome扩展程序,以阻止对某些网域的请求(厌倦了许多网站上的慢速页面加载,等待Facebook垃圾邮件)。我的问题是如何有效加载用户指定的域列表。 Chrome documentation指出将包含'urls'的映射传递给addListener调用更有效,而不是传递所有请求并在我的函数中检查它们。我该怎么做,但使用用户提供的域/表达式列表?

到目前为止,这是我的清单和js文件:

的manifest.json

{
  "name": "I Don't Want YOur Social Networking Junk",
  "version": "1.0",
  "description": "This extension let's you block (Chrome will not download) content from domains.  Too many sites slow themselves down by bringing in a bunch of junk from sites like facebook.  This will let you block those things.",
  "permissions": ["webRequest", "webRequestBlocking", "http://*/*", "https://*/*"],
  "background": {
    "scripts": ["background.js"]
  },

  "manifest_version": 2
}

background.js

chrome.webRequest.onBeforeRequest.addListener(
function(details) {
    return {cancel: true}; 
}, { urls: ["*://*.facebook.com/*", "*://*.facebook.net/*"] }, ["blocking"]);

正如您所看到的,我现在在网址列表中有几个硬编码表达式。这就是我想要从用户可以填充的内容中加载的内容。建议?

2 个答案:

答案 0 :(得分:10)

使用类似的东西:

function blockRequest(details) {
  return {cancel: true};
}

function updateFilters(urls) {
  if(chrome.webRequest.onBeforeRequest.hasListener(blockRequest))
    chrome.webRequest.onBeforeRequest.removeListener(blockRequest);
  chrome.webRequest.onBeforeRequest.addListener(blockRequest, {urls: urls}, ['blocking']);
}

您可以提供options page让用户指定要阻止的域(最好使用chrome.storage API保存它们)。在后台页面中,通过在初始化或更改设置时重新注册侦听器来更新过滤器。

顺便说一句,你应该在Declarative Web Request API稳定时使用它,因为它效率更高,不需要持久的后台页面。

答案 1 :(得分:1)

更简单的方法是使用Chrome扩展程序。我的朋友使用以上共享的API制作了一个名为Requestly的文件,可以轻松地轻松配置此类被阻止的请求。

example of block request in Requestly