2011-08-29 177 views
14

我需要檢測用戶是否運行jQuery插件的舊版IE(IE9很好),所以我不能控制HTML。檢測較舊的IE版本

我們一直不鼓勵解析用戶代理字符串,並使用$.browser.msie$.support方法也不包括這個問題。

所以,我發現這是有效的,但我不確定這是否是「良好實踐」。

$('body').append('<!--[if lte IE 8]><script>$("body").addClass("oldie");</script><![endif]-->'); 
var old_ie = $('body').is('.oldie'); 

您可以使用此方法或解析用戶代理字符串棒(我需要弄清楚,如果是IE瀏覽器,並獲得版本號)?

回答

16

您可以運行此

var ie = (function() { 
    var undef, v = 3, div = document.createElement('div'); 

    while (
     div.innerHTML = '<!--[if gt IE '+(++v)+']><i></i><![endif]-->', 
     div.getElementsByTagName('i')[0] 
    ); 

    return v > 4 ? v : undef; 
}()); 

檢測IE版本。

來源:http://ajaxian.com/archives/attack-of-the-ie-conditional-comment

然後

if (ie < 9) { 
    // do your stuff, for instance: 
    window.location = 'http://getfirefox.com'; // :p 
} 
+0

LOL我應該知道James Padolsey在一年前就知道了:)謝謝! – Mottie

+0

我記得之前看過Rangy,但是我認爲它不能和textareas一起工作,也許我需要在本月推出新版本之後再看一遍。再次感謝! – Mottie

2

你沒有明確你的問題中提到爲什麼你有一個特殊的需要檢測的IE9,所以在一般以下建議成立:

與其檢測特定瀏覽器/版本,不如檢測特定功能。 Modernizr是一個開始尋求幫助的好地方。

+0

有時候,IE不支持你不能使用JavaScript來檢查的東西。像CSS的東西。 –

+0

我諷刺的插件需要將插入符號放在textarea裏面...... IE9似乎在沒有對插入符號進行任何修改的情況下運行良好,但是舊版本並不表現。 – Mottie

+0

@fudgey考慮[Rangy](http://code.google.com/p/rangy/) –

1

如何:

if (!($.browser.msie && $.browser.version < 9.0)) { 
    // Apply only to IE8 and lower 
} 

注意,IE8表現爲IE7

+0

我試圖避免在我的問題中提到的瀏覽器嗅探。 – Mottie

+5

$ .browser已從1.3棄用,並從1.9刪除 –

+1

我只是想讓未來的讀者知道,他們正在尋找的答案可能現在/將來無法正常工作。我無法理解你的沮喪點 –

1

https://msdn.microsoft.com/en-us/library/ms537509%28v=vs.85%29.aspx 見上面的鏈接,這可能是官方的回答:) 簡而言之,代碼在HTML以下頁。

<!--[if gte IE 9]> 
<p>You're using a recent version of Internet Explorer.</p> 
<script type="text/javascript">//do something</script> 
<![endif]--> 

<!--[if lt IE 9]> 
<p>Hm. You should upgrade your copy of Internet Explorer.</p> 
<script type="text/javascript">//do something</script> 
<![endif]--> 

<![if !IE]> 
<p>You're not using Internet Explorer.</p> 
<script type="text/javascript">//do something</script> 
<![endif]> 
+0

是的,但我問的是如何用javascript以編程方式來做它......插件作者不能指望每個頁面都有條件註釋,所以我們必須自己添加它們。 – Mottie