在网页中,有没有办法通过javascript检测网络浏览器是否正在使用PAC文件http://xxx.xx.xx.xxx/toto.pac? 注意:可以在许多PAC后面查看同一页面,我不想使用服务器端语言,如果需要,我可以编辑toto PAC文件。此致
答案 0 :(得分:6)
您可以向已知的外部服务器(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
更改为代理添加到响应中的内容。
编辑:您必须添加条件以支持XMLHttpRequest
编辑:
我在代理工作,我刚刚在jsfiddle中测试了这段代码,它确实有效。可以做得更漂亮,以便支持IE并执行异步获取,但一般功能是... http://jsfiddle.net/unvHW/
事实证明,检测'via'要好得多......
答案 1 :(得分:1)
请注意,此解决方案不适用于每个代理,并且可能仅在您拥有代理时才有效:
某些代理在HTTP请求的响应标头中附加一个字段,该字段名为:X-Forwarded-For
例如,您可以通过向google.com
发送AJAX请求来实现您要执行的操作,并检查字段是否存在。
这样的事情:
$.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仅附加到请求中。您最好检查代理放在响应头中的响应头。
答案 2 :(得分:-2)
没有。
浏览器不会将这类配置数据暴露给网站。