2012-04-24 74 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版本而異。

我還沒有做過這個答案的任何測試 - ,請讓我們知道它是否在評論中的作品。