3

在网页中,有没有办法通过 javascript 检测网络浏览器是否正在使用 PAC 文件http://xxx.xx.xx.xxx/toto.pac?注意:可以在多个 PAC 后面查看同一页面,我不想使用服务器端语言,如果需要,我可以编辑 toto PAC 文件。问候

4

3 回答 3

9

您可以向已知的外部服务器(google.com)发出 ajax 请求,然后从该请求中获取标头以查看代理标头是否在请求中...

var proxyHeader = 'via';
var req = new XMLHttpRequest();
req.open('GET', document.location, false);
req.send();
var header = req.getResponseHeader(proxyHeader);
if (header) {
    // we are on a proxy
}

更改proxyHeader您的代理添加到响应中的内容。

编辑:您必须添加一个条件来支持 IE 的实现XMLHttpRequest

编辑:

我在工作的代理上,我刚刚在 jsfiddle 中测试了这段代码,它可以工作。可以做得更漂亮,以便支持 IE 并执行异步获取,但一般功能在那里...... http://jsfiddle.net/unvHW/

事实证明,检测“通过”要好得多......

于 2013-11-04T12:32:53.433 回答
2

请注意,此解决方案不适用于每个代理,并且可能仅在您落后于代理时才有效:

一些代理在 HTTP 请求的响应头中附加一个字段,称为:X-Forwarded-For

也许您可以通过 AJAX 请求来实现您想要做的事情,google.com例如并检查该字段是否存在。

像这样的东西:

  $.ajax({
   type: 'POST',
   url:'http://www.google.com',
   data: formData,
   success: function(data, textStatus, request){
        if(request.getResponseHeader('X-Forwarded-For')) !== undefined)
            alert("Proxy detected !");
   }
  });

编辑:正如迈克尔所说, X-Forwarded-For 仅附加到请求中。您最好检查您的代理放入响应标头中的响应标头。

于 2013-11-04T12:27:07.353 回答
-2

不。

浏览器不会向网站公开那种配置数据。

于 2013-11-04T12:24:15.387 回答