我目前正在开发一个允许用户设置代理的Chrome扩展程序,但问题是如果代理无法加载,Chrome在控制台中返回net::ERR_PROXY_CONNECTION_FAILED
,而html页面显示为&# 34;无法连接到代理服务器"。我一直在寻找一种方法来检测这种连接失败,所以我可以使用不同的代理或只是没有代理的普通ip恢复连接。奇怪的问题是我的扩展代码不在此页面上运行。
我错过了特定的#34;匹配"在" content_scripts"在清单文件中哪些特殊于错误页面? (即使错误页面的url是我尝试访问的页面的url,如果有可用的代理/连接,则会运行扩展代码)
有没有办法捕获此错误?任何想法都非常感谢。提前谢谢!
以下是我设置代理的方法但是作为提醒,此代码有效,问题是如果您尝试连接到不可用的代理服务器,浏览器就会关闭,我的扩展代码不再与页面一起运行。
var config = {
mode: "fixed_servers",
rules: {
singleProxy: {
scheme: "http",
host: request.ip
}
}
};
chrome.proxy.settings.set({
value: config,
scope: 'regular'
}, function() {});
我的清单代码:(在代理失败之前它应该运行)
"content_scripts": [ {
"js": [ "jquery-1.11.1.min.js", "myscript.js" ],
"matches": ["https://*/*","http://*/*","http://*/"],
"run_at": "document_end"
},
当代理无法访问时,错误页面chrome的图片会返回:
答案 0 :(得分:1)
如果您想支持多个代理,只需使用PAC script并指定后备,如下例所示(如果无法连接到proxy1:80
,则会尝试proxy2:8080
,并且如果失败,那么Chrome会因"DIRECT"
)而尝试直接连接。
var config = {
mode: 'pac_script',
pacScript: {
data: 'function FindProxyForURL(url, host) {\n' +
' if (url.substring(0, 5) == "http:")\n' +
' return "PROXY proxy1:80; PROXY proxy2:8080; DIRECT";\n' +
' return "DIRECT";\n' +
'}'
}
};
chrome.proxy.settings.set({
value: config,
scope: 'regular'
}, function() {
});