我正在制作一个非常简单的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"]);
正如您所看到的,我现在在网址列表中有几个硬编码表达式。这就是我想要从用户可以填充的内容中加载的内容。建议?
答案 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的文件,可以轻松地轻松配置此类被阻止的请求。