2012-04-24 41 views
1

我已经有一个工作的proxy.pac文件。我希望客户端根据他们的网络浏览器使用不同的代理服务器。PAC(代理自动配置)navigator.appName不可用

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

我找到的示例使用了所有“navigator.appName”。如果我在常规网站上进行测试,这很好。当我把它放到我的proxy.pac中时,它不起作用。导航器对象似乎不存在。

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

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

背景:IE6不支持在默认代理上使用的Kerberos身份验证。因此我使用LDAP authtentication设置了一个额外的代理。

在此先感谢您的帮助。

回答

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>])函数返回当前系统时间是否落入参数<第1天>,<第2天>,和< GMT>。只有第一个参数是必需的。格林尼治标准时间参数设置在格林尼治标准时间,而不是在本地时区。

记下函数调用<DAY1> == <DAY2>,IE浏览器的早期版本中会产生从与Netscape Navigator结果不同的结果。具体来说,以前版本的Internet Explorer会将这一天的范围解释为一整周,而Internet Explorer 6和Netscape Navigator将该范围解释为一天。 例如,如果当天是星期一,则在Internet Explorer 6和Netscape Navigator上,呼叫weekdayRange(“TUE”,“TUE”)在先前版本的Internet Explorer上返回TRUE并返回FALSE。

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

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

如果您发现任何有用的信息,请让我们知道。

+0

对不起,延迟回复。我做了一个解决方法,因为我发现没有解决方案正常工作。我将浏览器指向一个PHP脚本proxy.php,该脚本解析用户代理标题,并为ie6发送一个proxy.pac,并为其他所有者发送一个。 – casper 2012-08-13 17:15:10

0

您可以尝试通过Conditional Compilationconst ifIE = /*@[email protected]*/false;在PAC脚本内检测IE。
条件编译可能因新旧IE/Edge版本而异。

我还没有做过这个答案的任何测试 - ,请让我们知道它是否在评论中的作品。