Chrome扩展程序:阻止外部域中的内容加载到特定域的页面中

时间:2014-03-04 21:05:16

标签: google-chrome google-chrome-extension firefox-addon

我正在构建一个在我无法控制的社交网站上使用的扩展程序。该网站允许用户从其他域插入内容(图像,闪存等...)。我想阻止它。

我最初认为触发jquery document.ready并从那时删除html中的内容会很好,因为当dom加载但内容尚未加载时文档就会触发。我只是清空必要的div元素,希望这会阻止http请求的发生。不幸的是,这种技术不起作用。

然后我发现了chrome.webRequest,看起来它可能会起作用。我遇到的困难是将扩展程序仅限于我所在的域名。 Chrome.webRequest只能在后台页面中使用,而不能在内容脚本中使用。

我的初始显示权限看起来像这样:

 "permissions": [
    "tabs",
    "http://www.example.com/*",
  ],

但后来我使用chrome.webRequest.onBeforeRequest.addListener记录了请求我注意到只记录了扩展所针对的站点的图像请求。所以我将权限更改为:

"permissions": [
    "tabs",
    "<all_urls>",
    "webRequest",
    "webRequestBlocking"
  ],

我现在可以使用chrome.webRequest.onBeforeRequest.addListener查看所有请求。但是,因为此事件在后台页面中被触发,所以我将在浏览器中访问所有域和域。当我阻止加载图像时,它会阻止所有加载的网站上的所有图像。

问题是chrome.webRequest.onBeforeRequest.addListener返回的对象不包含用户当前所在选项卡的url。只有tabid。请求中没有任何内容可以看到我可以检测当前选项卡所在的域。我显然可以使用chrome.tabs.query获取带有tab标签的tab.url,但这与事件onBeforeRequest监听器是异步的。

这是目前的事件监听器代码:

chrome.webRequest.onBeforeSendHeaders.addListener(

    function(details) {

    if(details.type == "image" && (details.url.indexOf("://www.example.com") == -1)){
    console.log(details.url);       
            //THIS LOGS ALL IMAGES LOADING EXCEPT THE SITE THE EXTENSION IS FOR 
            //BUT THE CANCEL ALSO CANCELS IMAGES LOADING ON ALL OTHER SITES.
            return {cancel: true};
    }

    },
    {urls: ["<all_urls>"]},
    ["blocking"]); 

因此,简而言之,当加载的图像(可以是来自任何地方的图像)被加载到扩展名所在的站点时,我如何才运行取消代码?

最后(如果我可以让它工作)Firefox有类似chrome.webrequest的选项,因为我想构建一个类似Firefox的插件。

1 个答案:

答案 0 :(得分:1)

在这里你去找解决方案已经存在,所以不要接受这个作为解决方案,但是我发布在这里,所以它很好看,所有人都可以看到:

An example of nsIContentPolicy for firefox addon?