1

我已经有一个工作的 proxy.pac 文件。我希望客户根据他们的网络浏览器使用不同的代理服务器。

没问题,我想。那里有许多 java 脚本片段,用于检测浏览器名称/版本。

我发现的样本全部使用“navigator.appName”。如果我在常规网站上进行测试,那效果很好。当我将其放入我的 proxy.pac 时,它不起作用。导航器对象似乎不存在。

有没有人建议如何根据用户代理切换代理?

我的目标是,所有 IE6 都使用特定的代理,其余的只使用默认代理。

背景:IE6不支持Kerberos认证,默认代理上使用。因此,我使用 LDAP 身份验证设置了一个附加代理。

提前感谢您的帮助。

4

2 回答 2

0

也许人们可以发现的浏览器之间存在一些或多或少的细微 javascript 引擎差异,例如
if (typeof(someIESpecificFunction) != "undefined")
使用或使用 try 和 catch
或比较某些内置函数的结果以获得细微差异

http://en.wikipedia.org/wiki/Comparison_of_layout_engines_(ECMAScript)http://www.robertnyman.com/javascript/index.html可能有助于开始?

更新:另一种特定于浏览器版本的行为:

来自http://technet.microsoft.com/en-us/library/dd361918.aspx

    function FindProxyForURL(url, host)
    {
        if(weekdayRange("WED", "SAT", "GMT"))
            return "PROXY proxy:80";
        else
            return "DIRECT";
    }

weekdayRange(<day1> [,<day2>] [,<GMT>] ) 函数返回当前系统时间是否在参数<day1>、<day2>和<GMT>指定的范围内。只有第一个参数是必需的。GMT 参数设置采用 GMT 而非本地时区的时间。

注意如果使用 <day1> == <day2> 调用该函数,则早期版本的 Internet Explorer 将产生与使用 Netscape Navigator 的结果不同的结果。具体来说,早期版本的 Internet Explorer 会将这一天范围解释为一整周,而 Internet Explorer 6 和 Netscape Navigator 将该范围解释为一天。例如,如果当天是星期一,则调用 weekdayRange("TUE", "TUE") 在 Internet Explorer 的早期版本上返回 TRUE,在 Internet Explorer 6 和 Netscape Navigator 上返回 FALSE。

更新 2:根据http://blogs.msdn.com/b/wndp/archive/2006/07/18/ipv6-wpad-for-winhttp-and-wininet.aspx应该能够区分 IE7 和旧版本IE 版本(其他浏览器可能支持也可能不支持这些扩展,例如这里提到的关于 Chrome:http ://code.google.com/p/pactester/issues/detail?id=9 )

根据目前的信息,应该可以区分 IE 5.5、IE 6、IE 7、IE 8、IE 9?

如果您发现类似的有用信息,请告诉我们。

于 2012-07-23T11:27:11.160 回答
0

您可以尝试通过条件编译检测 PAC 脚本中的const ifIE = /*@cc_on!@*/false;IE :。
条件编译可能因新旧 IE/Edge 版本而异。

我没有对这个答案进行任何测试——请让我们知道它是否在评论中有效。

于 2017-01-13T15:34:23.100 回答