chrome扩展检测ERR_PROXY_CONNECTION_FAILED

时间:2014-11-16 18:50:27

标签: javascript jquery google-chrome-extension

我目前正在开发一个允许用户设置代理的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的图片会返回: enter image description here

1 个答案:

答案 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() {
});