2011-08-29 12 views
14

Muszę wykryć, czy użytkownik uruchamia starszą wersję IE (IE9 jest w porządku) z wtyczki jQuery, więc nie będę mieć kontroli nad kodem HTML.Wykryj starsze wersje IE

Zostaliśmy zniechęceni do analizowania ciągu znaków użytkownika i używania $.browser.msie. Metoda $.support również nie rozwiązuje problemu.

Tak więc doszedłem do wniosku, że to działa, ale nie jestem pewien, czy jest to "dobra praktyka".

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

należałoby użyć tej metody lub trzymać parsowania ciąg agenta użytkownika (Muszę dowiedzieć się, czy jest to IE i uzyskać numer wersji)?

Odpowiedz

16

Można uruchomić ten

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; 
}()); 

wykryć wersję IE.

Źródło:http://ajaxian.com/archives/attack-of-the-ie-conditional-comment

A potem

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

LOL Powinienem był wiedzieć, że James Padolsey to wymyślił ponad rok temu: dzięki! – Mottie

+0

Pamiętam, że wcześniej patrzyłem na Rangy'ego ... ale myślę, że nie działało to z tekstami, może muszę na to spojrzeć, odkąd w tym miesiącu ukazała się nowa wersja. Dzięki jeszcze raz! – Mottie

2

Nie wyraźnie wspomnieć w swoim pytaniu, dlaczego miałeś konkretną potrzebę wykrywania dla IE9, więc w ogóle posiada następujące rady:

Zamiast wykrywać konkretną przeglądarkę/wersję, należy zamiast tego wykrywać określone funkcje. Modernizr to dobre miejsce, aby zacząć z pomocą.

+0

Czasami istnieją rzeczy, których IE nie obsługuje, nie można używać JavaScript do sprawdzenia. Podobnie jak rzeczy CSS. –

+0

Wtyczka, na której chcę się ułożyć, musi umieścić kursor wewnątrz textarea ... IE9 wydaje się działać dobrze bez żadnych modyfikacji karetki, ale starsze wersje po prostu się nie zachowują. – Mottie

+0

@fudgey Zastanów się [Rangy] (http://code.google.com/p/rangy/) –

1

Jak o tym:

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

Zauważ, że IE8 pokazuje się jako IE7

+0

Staram się unikać wąchania przeglądarki, jak wspomniano w moim pytaniu. – Mottie

+5

$ .browser jest przestarzałe od wersji 1.3 i usunięte z wersji 1.9 –

+1

Po prostu chcę, aby przyszli czytelnicy wiedzieli, że odpowiedź, na którą patrzą, może nie działać teraz/w przyszłości. Nie rozumiem twojego punktu frustracji. –

1

https://msdn.microsoft.com/en-us/library/ms537509%28v=vs.85%29.aspx Patrz powyższy link, może to być oficjalna odpowiedź :) skrócie, kod następujący w html strona.

<!--[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

Tak, ale pytałem, jak to zrobić programowo za pomocą javascript ... autorzy wtyczek nie mogą oczekiwać, że każda strona ma komentarze warunkowe, więc musimy dodać je na własną rękę. – Mottie

Powiązane problemy