Chcę odesłać użytkowników naszej witryny do strony błędów, jeśli używają wersji Internet Explorer
wcześniejszej niż v9. Wspieranie nie jest warte naszego czasu i pieniędzy IE pre-v9
. Użytkownicy wszystkich innych przeglądarek innych niż IE mają się dobrze i nie należy ich odrzucać. Oto proponowany kod:
if(navigator.appName.indexOf("Internet Explorer")!=-1){ //yeah, he's using IE
var badBrowser=(
navigator.appVersion.indexOf("MSIE 9")==-1 && //v9 is ok
navigator.appVersion.indexOf("MSIE 1")==-1 //v10, 11, 12, etc. is fine too
);
if(badBrowser){
// navigate to error page
}
}
Czy ten kod załatwi sprawę?
Aby odpowiedzieć na kilka komentarzy, które prawdopodobnie pojawią się po mojej stronie:
- Tak, wiem, że użytkownicy mogą sfałszować swój
useragent
ciąg. Nie martwię się - Tak, wiem, że specjaliści od programowania wolą wykopywać obsługę funkcji zamiast przeglądarki, ale nie sądzę, aby takie podejście miało sens w tym przypadku. Wiem już, że wszystkie (odpowiednie) przeglądarki inne niż IE obsługują funkcje, których potrzebuję, i że wszystkie
pre-v9 IE
przeglądarki nie. Sprawdzanie poszczególnych funkcji w witrynie byłoby marnotrawstwem. - Tak, wiem, że ktoś próbujący uzyskać dostęp do witryny przy użyciu
IE v1
(lub> = 20) nie dostałby wartości „badBrowser” ustawionej na wartość true, a strona ostrzegawcza nie byłaby wyświetlana poprawnie. To ryzyko, które jesteśmy gotowi podjąć. - Tak, wiem, że Microsoft ma „komentarze warunkowe”, których można użyć do precyzyjnego wykrywania wersji przeglądarki. IE nie obsługuje już komentarzy warunkowych
IE 10
, co czyni tę metodę całkowicie bezużyteczną.
Czy są jeszcze jakieś oczywiste problemy?
javascript
internet-explorer
user-agent
browser-detection
Chad Decker
źródło
źródło
Odpowiedzi:
To mój ulubiony sposób na zrobienie tego. Daje maksymalną kontrolę. (Uwaga: instrukcje warunkowe są obsługiwane tylko w IE5 - 9.)
Najpierw poprawnie skonfiguruj swoje np. Klasy
Następnie możesz po prostu użyć CSS, aby zrobić wyjątki stylowe, lub, jeśli potrzebujesz, możesz dodać prosty JavaScript:
Dzięki Paulowi Irishowi .
źródło
Error: Saw <!-- within a comment. Probable cause: Nested comment (not allowed). At line 5, column 21 if gt IE 8]><!--><html
Zwraca wersję IE lub jeśli nie IE zwraca false
Przykład:
lub
lub
źródło
"mozilla/5.0 (windows nt 6.3; wow64; trident/7.0; .net4.0e; .net4.0c; media center pc 6.0; .net clr 3.5.30729; .net clr 2.0.50727; .net clr 3.0.30729; rv:11.0) like gecko"
if (isIE () && isIE () < 9) {
Jeśli nikt inny nie dodał
addEventLister
metody i używasz poprawnego trybu przeglądarki, możesz sprawdzić IE 8 lub mniej za pomocąStarsza wersja Internet Explorera i attachEvent (MDN)
źródło
Użyj komentarzy warunkowych. Próbujesz wykryć użytkowników IE <9, a komentarze warunkowe będą działać w tych przeglądarkach; w innych przeglądarkach (IE> = 10 i nie-IE) komentarze będą traktowane jak normalne komentarze HTML, takie są.
Przykładowy HTML:
Możesz to zrobić wyłącznie za pomocą skryptu, jeśli potrzebujesz:
źródło
Aby łatwo wykryć MSIE (v6 - v7 - v8 - v9 - v10 - v11):
źródło
Oto jak AngularJS sprawdza IE
źródło
Aby niezawodnie filtrować IE8 i starsze, można użyć sprawdzania obiektów globalnych :
źródło
Wykrywanie wersji IE przy użyciu funkcji wykrywania funkcji (IE6 +, przeglądarki wcześniejsze niż IE6 są wykrywane jako 6, zwraca wartość null dla przeglądarek innych niż IE):
Edycja: Utworzyłem repozytorium bower / npm dla Twojej wygody: wersja
Aktualizacja:
bardziej kompaktową wersję można zapisać w jednym wierszu jako:
źródło
Ta funkcja zwróci główny numer wersji IE jako liczbę całkowitą lub
undefined
jeśli przeglądarka nie jest Internet Explorerem. To, podobnie jak wszystkie rozwiązania agenta użytkownika, jest podatne na fałszowanie agenta użytkownika (co jest oficjalną funkcją IE od wersji 8).źródło
console.log(!!match && parseInt(match[1]))
,console.log(parseInt(match[1]))
iconsole.log(match)
, ale nie wynik z żadnym z nich.getIEVersion()
. Na przykład:if (getIEVersion() < 9) {/* IE 8 or below */}
if (!getIEVersion()) {/* Not IE */}
Wykryj IE w JS za pomocą komentarzy warunkowych
źródło
To działa dla mnie. Używam go jako przekierowania do strony, która wyjaśnia, dlaczego nie lubimy <IE9 i zapewnia linki do przeglądarek, które preferujemy.
źródło
Twój kod może wykonać sprawdzenie, ale jak myślałeś, jeśli ktoś spróbuje uzyskać dostęp do Twojej strony za pomocą IE v1 lub> v19, nie otrzyma błędu, więc może być bezpieczniej wykonać sprawdzenie za pomocą wyrażenia Regex, takiego jak ten kod poniżej:
źródło
Komentarze warunkowe nie są już obsługiwane w IE od wersji 10, jak podano na stronie odniesienia Microsoft .
następnie użyj:
źródło
version 11
EDIT: Ten kod jest NIESAMOWITY! haha, daje obiekt ze wszystkim w środku. Wersja ma 11, ale docModeIR to 9. Dzięki!Dla np. 10 i 11:
Możesz użyć js i dodać klasę w html, aby zachować standard komentarzy warunkowych :
Lub użyj lib jak Bowser:
https://github.com/ded/bowser
Lub modernizator do wykrywania funkcji:
http://modernizr.com/
źródło
Aby wykryć Internet Explorer 10 | 11, możesz użyć tego małego skryptu natychmiast po tagu body:
W moim przypadku używam biblioteki jQuery załadowanej do głowy.
źródło
Odpowiedzi na śmierć, ale to wszystko, czego potrzebujesz.
źródło
źródło
Według Microsoftu , poniższe jest najlepszym rozwiązaniem, jest również bardzo proste:
źródło
Polecam nie przepisywać tego kodu po raz kolejny. Polecam korzystanie z biblioteki Conditionizr ( http://conditionizr.com/ ), która może testować określone wersje IE, a także inne przeglądarki, systemy operacyjne, a nawet obecność lub brak wyświetlaczy Retina.
Dołącz kod tylko dla określonych testów, których potrzebujesz, a zyskasz także korzyść ze sprawdzonej biblioteki, która przeszła wiele iteracji (i którą można łatwo zaktualizować bez uszkodzenia kodu).
Ładnie łączy się również z Modernizr, który może obsłużyć wszystkie te przypadki, w których lepiej jest przetestować pod kątem konkretnych możliwości, a nie konkretnej przeglądarki.
źródło
Lubię to:
źródło
Takie podejście do wykrywania IE łączy mocne strony i pozwala uniknąć słabych stron odpowiedzi jKey przy użyciu komentarzy warunkowych i odpowiedzi Owena przy użyciu programów użytkownika.
Podejście Owena może zawieść w IE 5 i 6 (raportowanie 7) i jest podatne na fałszowanie UA, ale może wykryć wersje IE> = 10 (teraz również 12, które są późniejsze niż odpowiedź Owena).
Można tego użyć do ustawienia użytecznych klas w dokumencie zawierającym wersję IE:
Zauważ, że wykrywa on używany tryb zgodności, jeśli IE jest w trybie zgodności. Zauważ też, że wersja IE jest najbardziej przydatna dla starszych wersji (<10); wyższe wersje są bardziej zgodne ze standardami i prawdopodobnie lepiej zamiast tego sprawdzić funkcje za pomocą czegoś takiego jak modernizr.js.
źródło
Zrobiłem dla tego wygodny mixin z podkreśleniem.
źródło
lub po prostu
źródło
Najbardziej wszechstronny skrypt JS, który sprawdziłem pod kątem wersji IE, to http://www.pinlady.net/PluginDetect/IE/ . Cała biblioteka znajduje się pod adresem http://www.pinlady.net/PluginDetect/Browsers/ .
W IE10 instrukcje warunkowe nie są już obsługiwane.
W IE11 agent użytkownika nie zawiera już MSIE. Ponadto używanie klienta użytkownika nie jest niezawodne, ponieważ można je zmodyfikować.
Korzystając ze skryptu PluginDetect JS, możesz wykryć IE i wykryć dokładne wersje, używając bardzo konkretnego i dobrze spreparowanego kodu, który jest ukierunkowany na określone wersje IE. Jest to bardzo przydatne, gdy zależy Ci dokładnie na jakiej wersji przeglądarki pracujesz.
źródło
Zdaję sobie sprawę, że jestem trochę spóźniony na imprezę tutaj, ale sprawdziłem prosty, jednoliniowy sposób, aby przekazać opinię na temat tego, czy przeglądarka jest IE i jaka była wersja od 10 w dół. Nie kodowałem tego dla wersji 11, więc być może potrzebna będzie niewielka poprawka.
Jest to jednak kod, który działa jak obiekt, który ma właściwość i metodę i opiera się na wykrywaniu obiektu, a nie na skrobaniu obiektu nawigatora (który jest bardzo wadliwy, ponieważ może zostać sfałszowany).
Użycie jest
isIE.browser
właściwością, która zwraca wartość logiczną i opiera się na komentarzach warunkowych,isIE.detectedVersion()
która zwraca liczbę od 5 do 10. Przyjmuję założenie, że cokolwiek poniżej 6 i jesteś na poważnym terenie starej szkoły i będziesz miał coś bardziej mięsistego niż jeden liniowiec i wszystko powyżej 10 i jesteś na nowym terytorium. Przeczytałem coś o IE11, który nie obsługuje komentarzy warunkowych, ale nie w pełni zbadałem, to może na później.W każdym razie, tak jak jest, i dla jednej linijki, obejmie podstawy przeglądarki IE i wykrywania wersji. Jest daleki od ideału, ale jest mały i łatwo go zmienić.
Tylko w celach informacyjnych, a jeśli ktoś ma jakiekolwiek wątpliwości, jak to zaimplementować, pomocne powinny być następujące warunki.
źródło
Wykrywanie IE i jego wersji nie może być łatwiejsze, a wszystko czego potrzebujesz to trochę natywnego / waniliowego Javascript:
I to jest sposób na to:
.
Działa we wszystkich wersjach IE, w tym wyższych wersjach w niższym widoku / trybie zgodności, i
documentMode
jest zastrzeżony dla IE.źródło
Jeśli chcesz usunąć wersję przeglądarki IE, możesz wykonać poniższy kod. Ten kod działa dobrze dla wersji IE6 na IE11
źródło
Uruchomione okno IE10 będzie automatycznie aktualizować do IE11 + i będzie znormalizowane W3C
Obecnie nie musimy obsługiwać IE8
źródło
źródło
źródło