Najlepszy sposób na sprawdzenie IE mniej niż 9 w JavaScript bez biblioteki
Jaki byłby twój najszybszy, najkrótszy (najlepszy) sposób wykrycia przeglądarki, która jest IE i wersja mniej niż 9 w JavaScript, bez użycia jQuery lub żadnych bibliotek dodatków?
14 answers
Javascript
var ie = (function(){
var undef,
v = 3,
div = document.createElement('div'),
all = div.getElementsByTagName('i');
while (
div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
all[0]
);
return v > 4 ? v : undef;
}());
Możesz wtedy zrobić:
ie < 9
By James Panolsey from here: http://james.padolsey.com/javascript/detect-ie-in-js-using-conditional-comments
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-07 01:22:16
Na ile to jest warte:
if( document.addEventListener ){
alert("you got IE9 or greater");
}
To z powodzeniem działa na IE 9+, ponieważ metoda addEventListener
była obsługiwana bardzo wcześnie dla każdej większej przeglądarki oprócz IE. (Chrome, Firefox, Opera i Safari) MDN Reference. Jest on obecnie obsługiwany w IE9 i możemy się spodziewać, że będzie nadal obsługiwany tutaj.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-16 19:05:05
Używając komentarzy warunkowych, możesz utworzyć blok skryptów, który będzie wykonywany tylko w IE poniżej 9.
<!--[if lt IE 9 ]>
<script>
var is_ie_lt9 = true;
</script>
<![endif]-->
Oczywiście, można poprzedzić ten blok uniwersalnym blokiem, który deklaruje var is_ie_lt9=false
, który to zastąpi dla IE mniej niż 9. (W takim przypadku należy usunąć deklarację var
, ponieważ będzie ona powtarzalna).
EDIT: Oto wersja, która nie opiera się na wbudowanych blokach skryptów( może być uruchamiana z zewnętrznego pliku), ale nie używa agenta użytkownika sniffing:
Via @cowboy :
with(document.createElement("b")){id=4;while(innerHTML="<!--[if gt IE "+ ++id+"]>1<![endif]-->",innerHTML>0);var ie=id>5?+id:0}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-08 15:55:13
Bah do komentarzy warunkowych! Kod warunkowy do końca!!! (silly IE)
<script type="text/javascript">
/*@cc_on
var IE_LT_9 = (@_jscript_version < 9);
@*/
</script>
Poważnie, wyrzucę to na wszelki wypadek... to to samo, to może być tylko wplik js zamiast inline HTML
Uwaga: jest całkowicie przypadkowe, że sprawdzenie jscript_version to "9". Ustawienie go na 8, 7, itd nie sprawdzi "is IE8" ,trzeba będzie wyszukać wersje jscript dla tych przeglądarek.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-07 01:41:25
Poniżej jest poprawa w stosunku do rozwiązania Jamesa Padolseya:
1) nie zanieczyszcza pamięci (fragment Jamesa tworzy 7 nieodwracalnych fragmentów dokumentu podczas wykrywania IE11, na przykład).
2) jest szybszy, ponieważ sprawdza wartość documentMode przed wygenerowaniem znaczników.
3) jest o wiele bardziej czytelny, szczególnie dla początkujących programistów JavaScript.
Gist link: https://gist.github.com/julianshapiro/9098609
/*
- Behavior: For IE8+, we detect the documentMode value provided by Microsoft.
- Behavior: For <IE8, we inject conditional comments until we detect a match.
- Results: In IE, the version is returned. In other browsers, false is returned.
- Tip: To check for a range of IE versions, use if (!IE || IE < MAX_VERSION)...
*/
var IE = (function() {
if (document.documentMode) {
return document.documentMode;
} else {
for (var i = 7; i > 0; i--) {
var div = document.createElement("div");
div.innerHTML = "<!--[if IE " + i + "]><span></span><![endif]-->";
if (div.getElementsByTagName("span").length) {
return i;
}
}
}
return undefined;
})();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-27 17:45:33
var ie = !-[1,]; // true if IE less than 9
Ten hack jest obsługiwany w ie5,6,7, 8. Jest on ustalony w ie9+ (więc odpowiada wymaganiom tego pytania). Ten hack działa we wszystkich trybach kompatybilności IE.
Jak to działa: ie engine traktuje tablicę z pustym elementem (jak Ta [,1]) jako tablicę z dwoma elementami, zamiast tego inne przeglądarki myślą, że jest tylko jeden element. Więc kiedy przekonwertujemy tę tablicę na liczbę z operatorem + robimy coś takiego: (', 1' w ie / '1' w innych)*1 i otrzymujemy NaN w ie i 1 w innych. Niż zamieniamy go na boolean i odwracamy wartość z !. Proste. Przy okazji możemy użyć krótszej wersji bez ! znak, ale wartość zostanie odwrócona.
To jest najkrótszy hack do tej pory. A ja jestem autorem;)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-03 15:08:08
Zdecydowałem się na wykrywanie obiektów.
Po przeczytaniu tego: http://www.quirksmode.org/js/support.html i to: http://diveintohtml5.ep.io/detect.html#canvas
Użyłbym czegoś takiego
if(!!document.createElement('canvas').getContext) alert('what is needed, supported');
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-08 20:48:46
Ten link zawiera istotne informacje o wykrywaniu wersji programu Internet Explorer:
Http://tanalin.com/en/articles/ie-version-js/
Przykład:
if (document.all && !document.addEventListener) {
alert('IE8 or older.');
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-23 18:41:31
Można to zrobić w szybki i brudny sposób za pomocą wyrażenia regularnego i .match()
:
if (navigator.userAgent.match(/MSIE\s(?!9.0)/)) {
// ie less than version 9
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-07 01:22:51
Na Twoim miejscu użyłbym kompilacji warunkowej lub detekcji funkcji.
Oto inna alternatywa:
<!--[if lt IE 9]><!-->
<script>
var LTEIE8 = true;
</script>
<!--<![endif]-->
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-09 00:01:44
Czy trzeba to robić w JavaScript?
Jeśli nie, możesz użyć specyficznej dla IE składni komentarza warunkowego:
<!--[if lt IE 9]><h1>Using IE 8 or lower</h1><![endif]-->
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-07 01:23:02
Spodobała mi się odpowiedź Mike ' a Lewisa, ale kod nie przeszedł jslint i nie mogłem zrozumieć pętli funky while. Moim przypadkiem użycia jest umieszczenie komunikatu przeglądarki nieobsługiwanej, jeśli jest mniejszy lub równy IE8.
Oto darmowa wersja jslinta oparta na Mike ' u Lewisie:
/*jslint browser: true */
/*global jQuery */
(function () {
"use strict";
var browserNotSupported = (function () {
var div = document.createElement('DIV');
// http://msdn.microsoft.com/en-us/library/ms537512(v=vs.85).aspx
div.innerHTML = '<!--[if lte IE 8]><I></I><![endif]-->';
return div.getElementsByTagName('I').length > 0;
}());
if (browserNotSupported) {
jQuery("html").addClass("browserNotSupported").data("browserNotSupported", browserNotSupported);
}
}());
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-25 22:48:03
if (+(/MSIE\s(\d+)/.exec(navigator.userAgent)||0)[1] < 9) {
// IE8 or less
}
- wyodrębnij wersję IE z:
/MSIE\s(\d+)/.exec(navigator.userAgent)
- Jeśli nie jest to przeglądarka IE zwróci
null
więc w takim przypadku||0
zmieni tonull
na0
-
[1]
dostanie główną wersję IE lubundefined
jeśli nie była to przeglądarka IE - początek
+
zamieni ją na liczbę,undefined
zamieni naNaN
- porównanie
NaN
z liczbą zawsze zwrócifalse
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-08 17:51:59
Wszyscy próbujecie skomplikować tak proste rzeczy. Wystarczy użyć zwykłego i prostego komentarza warunkowego JScript. Jest najszybszy, ponieważ dodaje zero kodu do przeglądarek innych niż IE w celu wykrycia i ma kompatybilność sięgającą wersji IE przed wspieraniem komentarzy warunkowych HTML. W skrócie,
var IE_version=(-1/*@cc_on,@_jscript_version@*/);
Uwaga na minifiery: większość (jeśli nie wszystkie) pomyli specjalny komentarz warunkowy z zwykłym komentarzem i usunie go
Zasadniczo, wtedy powyżej kod ustawia wartość IE_version na wersję IE, której używasz, lub -1 f nie używasz IE. Pokaz NA ŻYWO:
var IE_version=(-1/*@cc_on,@_jscript_version@*/);
if (IE_version!==-1){
document.write("<h1>You are using Internet Explorer " + IE_version + "</h1>");
} else {
document.write("<h1>You are not using a version of Internet Explorer less than 11</h1>");
}