Chrome扩展程序可检查链接并重定向到其他网站

时间:2015-06-18 18:03:58

标签: javascript google-chrome-extension

我正在构建一个扩展程序,我想从我的chrome / firefox浏览器中阻止一些网站网址。

假设我有一个URL列表,我希望将其列为黑名单。 因此,每当chrome用户想要加入它们时,扩展程序将重定向到我选择的另一个URL(在代码中我将确定我想要它的URL)

通过一些研究,我设法为CHROME做了这个

的manifest.json

{
    "name": "URL Block",
    "description": "Redirect to another site",
    "version": "1.0",
    "manifest_version": 2,
    "background": {
        "scripts": [
            "background.js"
        ]
    },
    "permissions": [
        "webRequest",
                    "*://facebook.com/*",
            "*://www.facebook.com/*",
            "*://apple.com/*",
            "*://www.apple.com/*",
            "*://iptorrents.com/*",
            "*://www.iptorrents.com/*",
        "webRequestBlocking"
    ]
}

background.js

var host = "http://www.google.com";
chrome.webRequest.onBeforeRequest.addListener(
    function(details) {
         return {redirectUrl: host + details.url.match(/^https?:\/\/[^\/]+([\S\s]*)/)[1]};
    },
    {
        urls: [
            "*://facebook.com/*",
            "*://www.facebook.com/*",
            "*://apple.com/*",
            "*://www.apple.com/*",
            "*://iptorrents.com/*",
            "*://www.iptorrents.com/*"
        ],
        types: ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"]
    },
    ["blocking"]
);

所以这个扩展适用于我想要做的事情。 但现在我有一些问题。

问题:

让我们说我希望扩展程序重定向到2个不同的URL  (而不仅仅是在我上面的例子中的google.com。) [这意味着,当我输入网址:www.facebook.com并按回车时,扩展程序会将某个标签重定向到www.google.com并打开新标签以重定向到www.abc.com]

2 个答案:

答案 0 :(得分:1)

我不知道如何在chrome中使用它,但是使用firefox你可以这样做:

该解决方案中的

How can I change the User Agent in just one tab of Firefox?代替httpChannel.setRequestHeader执行httpChannel.redirectTo您可以在此处阅读有关redirectTo的内容:https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIHttpChannel#redirectTo%28%29

答案 1 :(得分:1)

你可以重定向标签打开一个新标签,这看起来就像你想要实现的那样。

就像这一样简单(在onBeforeRequest监听器中):

function(details) {
  chrome.tabs.create({
    url: "your 2nd URL",
    active: true // Change to false if you want it to open in the background
                 // and see the docs for more options
  });
  return {redirectUrl: "your 1st URL" };
}

但是,您可能不希望每次访问URL时都打开一个新选项卡。请注意您的types声明:

types: ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"]

这意味着每次任何页面尝试从这些网站加载资源时,您都会弹出一个新标签页。因此,最好按类型过滤:

function(details) {
  if(details.type == "main_frame") {
    chrome.tabs.create({
      url: "your 2nd URL",
      active: true
    });
  }
  return {redirectUrl: "your 1st URL" };
}