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