我正在构建一个扩展程序,我想从我的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]
答案 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" };
}