一起来做 Chrome 扩展之使用代理 proxy

发布于 2021-11-25 12:34:40 字数 2414 浏览 1233 评论 0

在这么一个高墙林立的地方,不会翻墙肯定是不行的,所以这次就来看看 chrome extension 如何简单的控制 chrome 代理的。

方法

chrome.proxy.settings.set({value: {}, scope: 'regular'},function() {});

这是文档里的方法,很简单,当然要控制代理,还得加一些东西,比如 value 对应的值

var config = {
	mode: "pac_script",
	pacScript: {
		data: pac
	}
};

config.mode 表明使用的是 pac_script,什么是 pac_script,可以看看 维基百科:代理自动配置,可以把它简单的理解为一个 JS 函数,FindProxyForURL(url, host),也就是 pacScript.data 对应的值。它虽然是一个 JS 函数,但是是以字符串的形式传给它的。具体情况如下:

var pac = "var FindProxyForURL = function(url, host){"+
	"if(shExpMatch(url, '*amazon\.com*')){"+
		"return 'PROXY 192.168.0.1:9000';"+
	"}"+
	"return 'DIRECT'"+
"}";

很好理解的代码,如果匹配到 amazon.com 就使用代理 192.18.0.1:9000,如果没有匹配到,直接返回,等于是什么都不做。shExpMatch 函数用来匹配 url 或者 host,匹配的方式和 DOS 的通配符相似,如果有多个匹配,直接写或||就可以了,如要匹配 amazon.com 和 google.com

var pac = "var FindProxyForURL = function(url, host){"+
	"if(shExpMatch(url, '*amazon\.com*')||"+
		"shsExpMatch(url, '*google\.com*')"+
	"){"+
		"return 'PROXY 192.168.0.1:9000';"+
	"}"+
	"return 'DIRECT'"+
"}";

这样,把它们结合一下,写成一个方法 setProxy()

function setProxy(){
	var pac = "var FindProxyForURL = function(url, host){"+
		"if(shExpMatch(url, '*amazon\.com*')||"+
			"shsExpMatch(url, '*google\.com*')"+
		"){"+
			"return 'PROXY 192.168.0.1:9000';"+
		"}"+
		"return 'DIRECT'"+
	"}";

	var config = {
		mode: "pac_script",
		pacScript: {
			data: pac
		}
	}

	chrome.proxy.settings.set({value: config, scope: 'regular'}, function(){});
}

在 background 中调用一下 setProxy() 方法,就启用了代理配置,如果打开 amazon.com 或是 google.com,就会使用代理去打开,如果是其它网站,就不使用代理。

如何切换代理

代理已经可以正常使用了,那如果有多个代理,怎么切换呢?其实很简单,结合上一篇 《本地存储localStorage》 闭着眼睛也能想到,使用 localStorage 来存储代理信息不就行了,把IP和端口转给 setProxy,加执行一下 setProxy 方法,就直接切换了代理。所以加上参数或使用全局变量都可以解决这个问题。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

柳絮泡泡

暂无简介

0 文章
0 评论
651 人气
更多

推荐作者

lorenzathorton8

文章 0 评论 0

Zero

文章 0 评论 0

萧瑟寒风

文章 0 评论 0

mylayout

文章 0 评论 0

tkewei

文章 0 评论 0

17818769742

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文