Chrome扩展设置代理方法

对chrome.proxy的简单介绍以及如何使用chrome.proxy进行网页代理访问

参考文档

1.Proxy
2.ChromeSetting
照顾像我这样不翻墙、E文差的伙伴。。

声明权限

{
	"permissions": ["proxy"]
}

基本方法

chrome.proxy.settings =  {
	clear: function (details, callback) {},
	get: function (details, callback) {},
	set: function (details, callback) {},
	onChange: Event
}

实现原理

先看下chrome.proxy.settings.get的源码:

chrome.proxy.settings.get = function (details, callback) {
	var getSchema = this.functionSchemas.get.definition.parameters;
	validate([details, callback], getSchema);
	return sendRequest('types.ChromeSetting.get',
		[prefKey, details, callback],
		extendSchema(getSchema));
} 
其他源码也类似,就不贴了。通过代码可以看出,其实。。只是对ChromeSettiing进行了封装而已。。

获取代理设置

chrome.proxy.settings.get({}, function(config){
	console.log(config.value);
})
其中第一个参数为要获取的策略,比如在隐身模式下的设置等,具体可以参考文档2

清除代理设置

chrome.proxy.settings.clear({},function(){})
其实就是把代理设置为默认

设置代理

// 代理配置
var config = {
	mode: 'fixed_servers',
	// mode模式有几种:
	// 1.direct			直接连接
	// 2.auto_detect	使用WPAD设置
	// 3.pac_script		使用PAC脚本
	// 4.fixed_servers	使用固定代理服务器
	// 5.system			使用系统设置
	rules: {
		proxyForHttp: {
			scheme: 'http',		// 代理方法
			host: '127.0.0.1',	// 代理地址
			port: 8080			// 代理端口
		},
		// rules规则有几种:
		// 1.singleProxy	// 用于所有请求协议
		// 2.proxyForHttp	// 用于http协议
		// 3.proxyForHttps	// 用于https协议
		// 4.proxyForFtp	// 用于ftp协议
		// 5.fallbackProxy	// 用于其他协议,如上未选协议
		// 6.bypassList		// 白名单列表,为不使用代理的url数组
	}
}
// 设置代理
chrome.proxy.settings.set({
	value: config,		// 配置,为我们所定义
	scope: 'regular'	// 类型,可参考文档2
}, function(){
	console.log("设置完毕后的回调函数");
})

设置代理:pacScript

var pacJs = '
function FindProxyForURL(u, h){
	return "PROXY 127.0.0.1:8080";
}
';
var config = {
	mode: 'pac_script',
	pacScript: {
		data: pacJs
	}
};
// ..后面相同设置

其他设置日后再添~