3

我需要檢測IE6以解決缺乏位置:固定。我一直在使用一個簡單的正則表達式:使用Javascript/jQuery重新檢測IE6

var isIE6 = /msie|MSIE 6/.test(navigator.userAgent); 

這個工程幾乎所有的時間,除了其瀏覽器號稱是既IE6和IE7用戶:

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 3.0.04506.30) 

光榮。

我很樂意使用jquery.support,但它看起來像不支持查詢position:fixed是否可用。所以我回來檢測IE6。

有各種建議的解決方案,如looking for the existence of maxHeight。但是那些看起來相當隨機並且嚇唬我 - 如果上面的正則表達式有例外,我怎麼能確定maxHeight沒有例外?

我在考慮使用條件註釋 - 至少這將是IE本身聲稱是IE6,而不是黑客。就像:

<!--[if IE 6]> 
<SCRIPT> var isIE6 = true; </SCRIPT> 
<![endif]--> 

或者有一個f unction that directly tests if position:fixed is available,但這似乎有點沉重。

任何原因我的條件註釋方法不起作用?有更好的方法嗎?

+3

我一直在使用條件註釋方法一段時間,並沒有任何問題。 – Pat 2010-08-05 21:45:13

回答

5

Paul Irish寫道an addition$.support專門用於檢查position: fixed的支持。我建議你走這條路,儘可能使用功能檢測而不是瀏覽器檢測。

你只需要包括在加入最後的功能,這一部分:

$.support.positionFixed = (function() { ..... })(); 

包括這個jQuery後,那麼你就可以在你的代碼中使用它,就像這樣:

if(!$.support.positionFixed) { 
    //handle browsers that don't support it 
} 
+0

非常感謝,看起來與我所鏈接的功能非常相似,並且它是位置可用性的一個很好的直接測試:固定的。我的關注是:我相信jquery本身能夠在各種瀏覽器中進行良好測試。保羅的延伸可能是太棒了,但我無法知道它被測試的範圍。因此有條件的評論看起來更安全...... – Parand 2010-08-05 22:16:42

+0

@Parand - 如果有問題,這就是他爲jQuery團隊所做的,他寫了一個名爲modernizer的庫:http://www.modernizr.com/這是專門爲功能檢測,保羅知道他在做什麼:) – 2010-08-05 22:22:25

+0

啊,很酷,沒有意識到他是在modernizr後面。感謝您的信息和細節。 – Parand 2010-08-06 15:22:45

0

http://api.jquery.com/jQuery.browser/

if ($.browser.msie && parseInt($.browser.version) == 6) { 
    // do something 
} 
+0

「我們建議不要使用此屬性,請嘗試使用功能檢測代替」 - jQuery – Seth 2010-08-05 21:47:21

+0

海報已經指出缺少位置測試:已在$ .support中修復。 – 2010-08-05 21:48:41

6
<script type="text/javascript"> 
    if (nothing_works) { 
     is_ie6 = true; 
    } 
</script> 

雖然嚴重,你的條件註釋可能是最好的,最準確的檢測方法。即使瀏覽器位於用戶代理中,它也可能不會像IE6一樣解析條件註釋。

我不得不回家並哭了一點,現在我已經知道有人還在爲IE6開發。

+0

+1這讓我笑:) – 2010-08-05 21:48:33

+0

+1這麼說很少有 – riwalk 2010-08-05 21:50:13

+1

這不是最準確的方法,*實際上*檢測瀏覽器是否支持'position:fixed'將是最準確的方法:) – 2010-08-05 21:51:15

1

我遇到過的解決IE問題的最好方法是使用條件註釋:

<!--[if IE 6]> 
... link IE 6 specific stylesheet or a script... 
<![endif]--> 

This方法也將使您的頁面向前兼容,以便將來的IE版本可以在不需要所有IE6(和更低)樣式的情況下呈現它。

0

我說你也應該帶條件註釋。它適用於CSS和JavaScript或任何你可能想放在那裏的東西。在我看來,這是最好的選擇。但我不會像你在你的例子中那樣使用一個變量。我會去尋找一個外部的ie6.js鏈接,它將覆蓋你在原始非ie6代碼中所做的任何事情。這樣,你不會在你乾淨的代碼中得到ie6垃圾/變量。

<!--[if IE 6]> 
<script type="text/javascript" src="ie6.js"></script> 
<![endif]-->