Jak ustawić kierowanie tylko na Internet Explorer 10 w pewnych sytuacjach, takich jak kod CSS specyficzny dla programu Internet Explorer lub kod JavaScript specyficzny dla programu Internet Explorer?

160

Jak ustawić kierowanie tylko na Internet Explorer 10 w pewnych sytuacjach, takich jak kod CSS specyficzny dla programu Internet Explorer lub kod JavaScript specyficzny dla programu Internet Explorer?

Próbowałem tego, ale to nie działa:

<!--[if IE 10]>    <html class="no-js ie10" lang="en"> <![endif]-->
<!--[if !IE]><!--> <html lang="en" class="no-js"> <!--<![endif]-->

Internet Explorer 10 ignoruje komentarze warunkowe i używa <html lang="en" class="no-js">zamiast <html class="no-js ie10" lang="en">.

trusktr
źródło
8
Myślę, że lepszym pytaniem byłoby: jak sprawić, by ten CSS wyglądał tak samo w obu przeglądarkach?
BentOnCoding
12
IE10 PP4 Nadal popiera to @cc_onstwierdzenie . Tak więc, aby wykryć czy IE10 jest obsługiwany lub nie, można użyć następującego kodu: <!--[if !IE]><!--><script>if(/*@cc_on!@*/false){document.documentElement.className+=' ie10';}</script><!--<![endif]-->. (Opublikowałem to jako komentarz, ponieważ IE jest nadal w fazie rozwoju, więc nie wiadomo, czy ostateczna wersja obsługuje również tę funkcję)
Rob W
15
@RobW - Twój przykładowy kod będzie nieprawidłowy po wydaniu ie11. Ulepszona wersja: <script>if(Function('/*@cc_on return document.documentMode===10@*/')()){document.documentElement.className+=' ie10';}</script>Ulepszenia: nie wymaga warunkowych komentarzy; działa nawet wtedy, gdy usuwa kompresję / przetwarzanie komentarzy; brak dodanej klasy dla ie11; będzie współpracować z ie11 działającym w trybie zgodności ie10; nie potrzebuje samodzielnego tagu skryptu (można go po prostu dodać do innego javascript w głowie).
robocat
2
Przykład powyższego fragmentu kodu: jsbin.com/upofoq/2
robocat
8
Bardziej ogólnym rozwiązaniem jest: if(document.documentMode) document.documentElement.className+=' ie'+document.documentMode+'mode';- które rozwiązuje 90% problemów (czasami tryby zgodności zawodzą, w takim przypadku potrzebny jest inny poziom poprawki).
robocat

Odpowiedzi:

65

Być może możesz wypróbować kilka jQuery w ten sposób:

if ($.browser.msie && $.browser.version === 10) {
  $("html").addClass("ie10");
}

Aby skorzystać z tej metody, należy dołączyć bibliotekę jQuery Migrate, ponieważ ta funkcja została usunięta z głównej biblioteki jQuery.

Wyszło mi całkiem nieźle. Ale z pewnością nie zastąpi komentarzy warunkowych!

Max Sohrt
źródło
3
Nie jestem pewien co do was, ale muszę użyć == '10.0', żeby to zadziałało
lulalala
112
Ostrzeżenie: jQuery.browsernie jest już dostępny w aktualnej wersji jQuery (1.9) bez wtyczki. blog.jquery.com/2013/01/15/…
dave1010
2
Polecam: if (jQuery.browser.msie && jQuery.browser.version < 10) { // do what you will here }Zwróć uwagę na wersję <10, aby wykryć starsze wersje IE. IE10 i nowsze działają dobrze ze wszystkimi moimi CSS3, HTML5, jquery itp.
Dan Mantyla
1
@dan, ponieważ komentarze warunkowe działają we wszystkich przeglądarkach IE, mniej niż 10, używaj ich zamiast zaśmiecać JS we wszystkich przeglądarkach. Po prostu powiedz <! - [if lte IE 9]> i możesz kierować reklamy na wszystkie wersje IE mniejsze niż 10. Nie jest wymagany JS.
edhurtig
1
@ Marc-AndréLafortune podnosi rację. Z reguły należy zawsze używać operatora ===, a nie ==. Pisząc javascript, musisz o tym pamiętać. stackoverflow.com/questions/359494/…
Stewart,
132

Nie użyłbym JavaScript navigator.userAgentani $ .browser (który używa navigator.userAgent), ponieważ można go sfałszować.

Aby kierować reklamy na Internet Explorer 9, 10 i 11 (uwaga: także najnowszy Chrome):

@media screen and (min-width:0\0) { 
    /* Enter CSS here */
}

Aby kierować reklamy na Internet Explorer 10:

@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
    /* IE10+ CSS here */
}

Aby skierować reklamy do przeglądarki Edge:

@supports (-ms-accelerator:true) {
  .selector { property:value; } 
}

Źródła:

Roni
źródło
To naprawdę miłe. Ale jak bardzo powinniśmy się martwić, testując różne tryby dokumentów pod kątem trybów przeglądarki w IE? W jakich sytuacjach możemy oczekiwać, że użytkownicy online będą używać innego trybu dokumentu niż bieżący tryb przeglądarki?
klewis
ludzie zwykle nie zmieniają trybu dokumentu. Mogą, ale nie natknąłem się na żadną witrynę, która wymagałaby od użytkownika zmiany trybu dokumentu. Jeśli używasz prawidłowego DOCTYPE, nie stanowi to żadnego problemu.
Roni,
3
Jesteś moim bohaterem! Tylko uwaga, to również naprawiło kilka błędów w IE11
locrizak
8
Wpływa to również IE11 - więc jeśli szukasz rozwiązania, aby kierować tylko IE9 / 10 jeden nie działa :-(
Łukasz Lenart
1
Co masz na myśli, mówiąc „wszyscy z nich wykrywają przeglądarkę przez navigator.userAgent”? Kompilacja warunkowa to wbudowana funkcja środowiska wykonawczego JScript, której nie można sfałszować za pomocą ciągu agenta użytkownika.
BoltClock
111

Znalazłem rozwiązanie na tej stronie, gdzie ktoś miał cenny komentarz :

Rozwiązaniem jest:

if (Function('/*@cc_on return document.documentMode===10@*/')()){
    document.documentElement.className+=' ie10';
}

To

  • nie potrzebuje komentarzy warunkowych;
  • działa nawet wtedy, gdy usuwa kompresję / przetwarzanie komentarzy;
  • brak klasy ie10 dodanej w przeglądarce Internet Explorer 11;
  • bardziej prawdopodobne, że będzie działać zgodnie z przeznaczeniem w przeglądarce Internet Explorer 11 działającej w trybie zgodności z programem Internet Explorer 10;
  • nie potrzebuje samodzielnego tagu skryptu (można go po prostu dodać do innego kodu JavaScript w głowie).
  • nie potrzebuje jQuery do testowania
Willem de Wit
źródło
3
@ dave1010 Agentów użytkownika można łatwo sfałszować. Komentarze warunkowe są obsługiwane tylko przez silnik JScript, który jest dostępny tylko w IE4 + (w tym 10).
Rob W
2
@ dave1010 Pisanie działającego parsera, który robi to, co opisujesz, jest trudne i niezwykle mało prawdopodobne. Każdy, kto celowo tworzy i instaluje takie rozszerzenie, najprawdopodobniej zamierza „działać jak” IE (być może w celu automatycznego testowania w środowiskach innych niż Windows?). W przeglądarkach nigdy nie ma gwarancji 100% zaufania, ale można się wystarczająco zbliżyć. Komentarze warunkowe to wysoce niezawodny sposób wykrywania silnika JScript, który jest używany przez IE.
Rob W,
3
jedyną wadą, jaką widzę, jest to, że wymaga js, którego warunki warunkowe nie
James Westgate
4
To powinna być najlepsza odpowiedź, a wymóg JS powinien być dyskusyjny dla użytkowników IE10 - jeśli JS jest wyłączony, prawdopodobnie będzie to tylko dodatek NoScript. Myślę, że potrzebujemy więcej publicznej edukacji na temat czystej głupoty NoScript (w przeciwieństwie do rozsądnych dodatków, takich jak AdBlock czy Ghostery).
iono
8
Sugerowałbym użycie alternatywnego kodu dostarczonego przez autora: if (/*@cc_on!@*/false && document.documentMode === 10) {}który omija ostrzeżenia ewaluacyjne w programach lintujących.
ajbeaven
62

Internet Explorer 10 nie próbuje już czytać komentarzy warunkowych.Oznacza to, że będzie traktować komentarze warunkowe tak, jak każda inna przeglądarka: jako zwykłe komentarze HTML, które mają być całkowicie ignorowane. Patrząc na znaczniki podane w pytaniu jako przykład, wszystkie przeglądarki, w tym IE10, całkowicie zignorują fragmenty komentarza, podświetlone na szaro. Standard HTML5 nie wspomina o warunkowej składni komentarzy i właśnie dlatego zdecydował się zaprzestać obsługi tego w IE10.

Należy jednak pamiętać, że kompilacja warunkowa w języku JScript jest nadal obsługiwana, jak pokazano w komentarzach, a także w nowszych odpowiedziach. W przeciwieństwie do tegojQuery.browser , nie zniknie też w ostatecznej wersji . I oczywiście jest oczywiste, że węszenie klienta użytkownika pozostaje tak delikatne jak zawsze i nigdy nie powinno być używane w żadnych okolicznościach.

Jeśli naprawdę musisz celować w IE10, użyj kompilacji warunkowej, która może nadal być obsługiwana w najbliższej przyszłości, lub - jeśli możesz w tym pomóc - użyj biblioteki wykrywania funkcji, takiej jak Modernizr, zamiast (lub w połączeniu z) wykrywaniem przeglądarki. O ile twój przypadek użycia nie wymaga noscript lub dostosowania IE10 po stronie serwera, węszenie klienta użytkownika będzie bardziej uciążliwe niż opłacalna opcja.

Brzmi dość nieporęcznie, ale pamiętaj, że jako nowoczesna przeglądarka, która jest wysoce zgodna z dzisiejszymi standardami sieciowymi 1 , zakładając, że napisałeś kod interoperacyjny, który jest wysoce zgodny ze standardami, nie powinieneś odkładać na bok specjalnego kodu dla IE10, chyba że jest to absolutnie konieczne, tzn. ma przypominać inne przeglądarki pod względem zachowania i renderowania. 2 I brzmi to naciągane, biorąc pod uwagę historię IE, ale ile razy spodziewałeś się, że Firefox lub Chrome będą zachowywać się w ten sam sposób, tylko po to, by spotkać się z konsternacją?

Jeśli zrobić mają uzasadnione powody do kierowania niektórych przeglądarek, za wszelką cenę wąchać je z innymi narzędziami podanych do Ciebie. Mówię tylko, że dziś będzie o wiele trudniej znaleźć taki powód niż to, co było kiedyś, i naprawdę nie jest to coś, na czym można polegać.


1 Nie tylko IE10, ale także IE9, a nawet IE8, który obsługuje większość dojrzałego standardu CSS2.1 znacznie lepiej niż Chrome, po prostu dlatego, że IE8 był tak skoncentrowany na zgodności ze standardami (w tym czasie CSS2.1 był już dość stabilny z niewielkimi różnicami z dzisiejszej rekomendacji), podczas gdy Chrome wydaje się być trochę więcej niż na wpół dopracowaną demonstracją techniczną nowatorskich pseudo-standardów.

2 I mogę być stronniczy, kiedy to mówię, ale to na pewno. Jeśli Twój kod działa w innych przeglądarkach, ale nie w IE, prawdopodobieństwo, że jest to problem z Twoim własnym kodem, a nie z IE10, jest znacznie większe w porównaniu z, powiedzmy, 3 lata temu, z poprzednimi wersjami IE. Znowu mogę być stronniczy, ale bądźmy szczerzy: czy ty też nie? Spójrz tylko na swoje komentarze.

BoltClock
źródło
20
Chhhh, tak, IE10 nadal pozostaje daleko w tyle za webkitem i gecko. Mam trochę CSS, które wyglądają ładnie w webkicie i ohydnie w IE10. Jeśli nie mogę znaleźć sposobu na selektywne stosowanie stylów, będę musiał porzucić takie style. :(
trusktr
2
Warto zwrócić uwagę, że komentarze warunkowe zostały usunięte w IE10, ponieważ ma teraz parser HTML5. Komentarze warunkowe nie są poprawne zgodnie z algorytmem analizy HTML5. Zobacz sekcję dotyczącą starszych funkcji blogs.msdn.com/b/ie/archive/2011/07/06/…
David Storey
3
@trusktr, jeśli dobrze go zakodujesz, będzie dobrze wyglądać we wszystkich najnowszych przeglądarkach.
Klevis Miho,
10
@KlevisMiho Nie prawda, Chrome i Firefox obsługują funkcje, których IE nie ma, nawet jeśli są dobrze zakodowane. Jeśli masz na myśli „używaj tylko wspólnych funkcji”, to nie jest to to samo, co „dobrze koduj”.
trusktr
5
@Dan Mantyla: W takim razie<!--[if !IE]><!-->stuff you don't want IE9 and below to see<!--<![endif]-->
BoltClock
36

Dobrym miejscem do rozpoczęcia jest dokumentacja IE Standards Support Documentation .

Oto jak kierować reklamy na IE10 w JavaScript:

if ("onpropertychange" in document && !!window.matchMedia) {
...
}

Oto jak kierować reklamy na IE10 w CSS:

@media all and (-ms-high-contrast: none) {
...
}

W przypadku konieczności przefiltrowania lub zresetowania IE11 przez CSS, zobacz inne pytanie: Jak napisać hack CSS dla IE 11?

Paul Sweatte
źródło
5
Twoje rozwiązanie CSS wpływa również na IE11: \
Lukasz Lenart
11

Oba zamieszczone tutaj rozwiązania (z niewielkimi modyfikacjami) działają:

<!--[if !IE]><!--><script>if(/*@cc_on!@*/false){document.documentElement.className='ie10';}</script><!--<![endif]-->

lub

<script>if(Function('/*@cc_on return 10===document.documentMode@*/')()){document.documentElement.className='ie10';}</script>

Umieszczasz jedną z powyższych linii w tagu head strony html przed linkiem css. Następnie w pliku css określasz swoje style mając klasę „ie10” jako rodzica:

.ie10 .myclass1 { }

I voilà! - inne przeglądarki pozostają nienaruszone. I nie potrzebujesz jQuery. Możesz zobaczyć przykład, jak to zaimplementowałem tutaj: http://kardash.net .

Eugene Kardash
źródło
11

Napisałem małą, waniliową wtyczkę JavaScript o nazwie Layout Engine , która umożliwia wykrywanie IE 10 (i każdej innej przeglądarki) w prosty sposób, którego nie można sfałszować, w przeciwieństwie do podsłuchiwania klienta użytkownika.

Dodaje nazwę silnika renderującego jako klasę do tagu html i zwraca obiekt JavaScript zawierający dostawcę i wersję (w stosownych przypadkach)

Sprawdź mój post na blogu: http://mattstow.com/layout-engine.html i pobierz kod na GitHub: https://github.com/stowball/Layout-Engine

Matt Stow
źródło
7

Używam tego skryptu - jest przestarzały, ale skuteczny w kierowaniu na osobny arkusz stylów programu Internet Explorer 10 lub plik JavaScript, który jest dołączany tylko wtedy, gdy przeglądarka to Internet Explorer 10, tak samo jak w przypadku komentarzy warunkowych. Nie jest wymagana żadna wtyczka jQuery ani inna wtyczka.

<script>
    /*@cc_on
      @if (@_jscript_version == 10)
          document.write(' <link type= "text/css" rel="stylesheet" href="your-ie10-styles.css" />');
      @end
    @*/
</script >
Deborah
źródło
2
Chłodny. Czy mógłbyś dodać trochę informacji o tym, czym są te @ oświadczenia?
trusktr
6

Możesz użyć PHP, aby dodać arkusz stylów dla IE 10

Lubić:

if (stripos($_SERVER['HTTP_USER_AGENT'], 'MSIE 10')) {
    <link rel="stylesheet" type="text/css" href="../ie10.css" />
}
Lenny Bruyninckx
źródło
2
Nie ma sensu podnosić struny, ponieważ w stripos nie jest rozróżniana wielkość liter;)
mgutt
2
Zawsze o to kuszę, ale potem pamiętam, że psuje się, gdy na froncie jest cdn / cache / proxy.
Johan,
5

Jeśli musisz to zrobić, możesz sprawdzić ciąg agenta użytkownika w JavaScript:

var isIE10 = !!navigator.userAgent.match(/MSIE 10/);

Jak wspomniały inne osoby, zawsze zalecałbym zamiast tego wykrywanie funkcji.

dave1010
źródło
po co są `` !! ''?
Francisco Corrales Morales
4
String.match()zwróci tablicę dla dopasowania lub null, jeśli tak nie jest. !(String.match())powoduje, że zwraca wartość false w przypadku dopasowania lub true w przypadku braku dopasowania. !(!(String.match()))powoduje, że zwraca wartość true w przypadku dopasowania lub false w przypadku braku dopasowania. !(!(something))lub po prostu !!somethingkonwertuje cokolwiek na boolean true / false. stackoverflow.com/questions/784929/…
dave1010
@FranciscoCorralesMorales Och, ile razy zostałem o to zapytany, kiedy mój kod jest sprawdzany. :) Jako rozszerzenie świetnego komentarza dave1010, można go użyć do przekształcenia „prawdziwych” lub „fałszywych” wartości w booleanwartość wewnętrzną , np var name = 'me', hasName = !!name;.
WynandB,
4

Jeśli chcesz kierować reklamy na IE 10 za pomocą Vanilla JavaScript, możesz wypróbować wykrywanie właściwości CSS:

if (document.body.style.msTouchAction != undefined) {
  document.body.className = 'ie10';
}

Właściwości CSS

Zamiast tego msTouchActionmożesz również użyć jednej z tych właściwości CSS, ponieważ są one obecnie dostępne tylko w IE 10. Ale to może się zmienić w przyszłości.

  • msTouchAction
  • msWrapFlow
  • msWrapMargin
  • msWrapThrough
  • msScrollLimit
  • msScrollLimitXMin
  • msScrollLimitYMin
  • msScrollLimitXMax
  • msScrollLimitYMax
  • msFlexbox
  • msFlex
  • msFlexOrder

Strona testowa

Mam ułożyła stronę testową ze wszystkich właściwości na CodePen.

TimPietrusky
źródło
3

clipBoardData to funkcja dostępna tylko w IE, więc jeśli chcesz kierować reklamy na wszystkie wersje IE, możesz użyć

<script type="text/javascript">
if (window.clipboardData)
            alert("You are using IE!");
</script>
Njaal Gjerde
źródło
-1: ale co z wersjami? po czym poznać, która wersja jest?
Francisco Corrales Morales
Przeglądarka Edge również nie ma „window.clipboardData”
AFD,
@AFD To pytanie dotyczy IE, a nie Edge.
TylerH,
3

CSS dla IE10 + i IE9

@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
    /* IE10+ styles */
}

@media screen\0 {
    /* IE8,9,10 styles*/
}
svnm
źródło
1

Możesz użyć wykrywania funkcji, aby sprawdzić, czy przeglądarka to IE10 lub nowsza:

var isIE = false;
if (window.navigator.msPointerEnabled) {
    isIE = true;
}

Prawda tylko wtedy, gdy> IE9

George Filippakos
źródło
1

Z JavaScript:

if (/Trident/g.test(navigator.userAgent)) { // detect trident engine so IE
        document.getElementsByTagName('html')[0].className= 'no-js ie'; }

Pracuj dla wszystkich IE.

IE08 => 'Trident/4.0'

IE09 => 'Trident/5.0'

IE10 => 'Trident/6.0'

IE11 => 'Trident/7.0'

Więc zmiany /Trident/gprzez /Trident/x.0/ggdzie x = 4, 5, 6i 7(lub być może 8w przyszłości).

Wydarzenia Endera
źródło
1

Chciałem tylko dodać moją wersję wykrywania IE. Jest oparty na fragmencie znalezionym na http://james.padolsey.com/javascript/detect-ie-in-js-using-conditional-comments/ i rozszerzony tak, aby obsługiwał również ie10 i ie11. Wykrywa IE od 5 do 11.

Wszystko, co musisz zrobić, to gdzieś go dodać, a potem zawsze możesz sprawdzić z prostym warunkiem. Globalna zmienna isIEbędzie niezdefiniowana, jeśli nie jest IE, lub w przeciwnym razie będzie to numer wersji. Możesz więc łatwo dodawać rzeczy takie jak if (isIE && isIE < 10)lub podobne.

var isIe = (function(){
    if (!(window.ActiveXObject) && "ActiveXObject" in window) { return 11; /* IE11 */ }
    if (Function('/*@cc_on return /^10/.test(@_jscript_version) @*/')()) { return 10; /* IE10  */ }
    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;
}());
Sty
źródło
0

U mnie poniższy kod działa dobrze, wszystkie komentarze warunkowe działają we wszystkich wersjach IE:

<!--[if lt IE 7 ]> <html class="ie6"> <![endif]-->
<!--[if IE 7 ]>    <html class="ie7"> <![endif]-->
<!--[if IE 8 ]>    <html class="ie8"> <![endif]-->
<!--[if IE 9 ]>    <html class="ie9"> <![endif]-->
<!--[if (gt IE 11)|!(IE)]><!--> <html> <!--<![endif]-->

<script>
    if (document.documentMode===10){
        document.documentElement.className+=' ie10';
    }
    else if (document.documentMode===11){
        document.documentElement.className+=' ie11';
    }
</script>

Jestem na Windows 8.1, nie jestem pewien, czy jest to związane z aktualizacją IE11 ...

Alex
źródło
1
(gt IE 11)Bit jest całkowicie zbędne. Równie dobrze możesz po prostu to zrobić <!--[if !(IE)]<!-->.
BoltClock
BoltClock, jeśli pominięto (gt IE 11), a przeglądarka użytkownika to IE 12 (kiedy się pojawi), nie byłoby zdefiniowanego elementu html.
Leonardo Gonzalez
0

Oto jak robię niestandardowy CSS dla Internet Explorera:

W moim pliku JavaScript:

function isIE () {
      var myNav = navigator.userAgent.toLowerCase();
      return (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;
}

jQuery(document).ready(function(){
    if(var_isIE){
            if(var_isIE == 10){
                jQuery("html").addClass("ie10");
            }
            if(var_isIE == 8){
                jQuery("html").addClass("ie8");
                // you can also call here some function to disable things that 
                //are not supported in IE, or override browser default styles.
            }
        }
    });

A następnie w moim pliku CSS y zdefiniuj każdy inny styl:

.ie10 .some-class span{
    .......
}
.ie8 .some-class span{
    .......
}
Francisco Corrales Morales
źródło
0

użyj babel lub maszynopisu do konwersji tego kodu js

const browser = () => {
    // "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3576.0 Safari/537.36"
    // "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.17 Safari/537.36"
    // "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763"
    // "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0"
    // "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; rv:11.0) like Gecko"
    // "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)"
    // "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)"
    // "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)"
    // "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)"
    const _userAgent = navigator.userAgent;
    const br = {
        "Chrome": "Chrome",
        "Edge": "Edge",
        "Firefox": "Firefox",
        ".NET CLR": "Internet Explorer 11",
    };
    const nobr = {
        "MSIE 10.0": "Internet Explorer 10",
        "MSIE 9.0": "Internet Explorer 9",
        "MSIE 8.0": "Internet Explorer 8",
        "MSIE 7.0": "Internet Explorer 7"
    };
    let thisBrow = "Unknown";
    for (const keys in br) {
        if (br.hasOwnProperty(keys)) {
            if (_userAgent.includes(keys)) {

                thisBrow = br[keys];

                for (const key in nobr) {
                    if (_userAgent.includes(key)) {
                        thisBrow = nobr[key];
                    }
                }

            }
        }
    }

    return thisBrow;
};

Aliaksandr Shpak
źródło
Cześć Aliaksandr, dzięki za pomysł! Nie wiem, dlaczego ktoś przegłosował, ale ja zagłosowałem za, ponieważ odpowiedź jest przynajmniej pomocną wskazówką. Kto głosuje przeciw, czemu nie pomóc nowemu użytkownikowi pomocnymi radami?
trusktr
-2

Ta odpowiedź doprowadziła mnie do tego w 90%. Resztę odpowiedzi znalazłem w witrynie Microsoft tutaj .

Poniższy kod jest tym, czego używam do kierowania wszystkich, tj. Poprzez dodanie klasy .ie do <html>

Użyj jQuery (który przestał działać .browser na rzecz klientów użytkownika w wersji 1.9+, zobacz http://api.jquery.com/jQuery.browser/ ), aby dodać klasę .ie:

// ie identifier
$(document).ready(function () {
  if (navigator.appName == 'Microsoft Internet Explorer') {
    $("html").addClass("ie");
  }
});
bdanin
źródło
„który w wersji 1.9+ wycofał .browser na rzecz klientów użytkownika” Nie mówi „na korzyść klientów użytkownika” - cokolwiek to znaczy - mówi na korzyść wykrywania funkcji .
BoltClock
-2

Jeśli nie masz nic przeciwko kierowaniu na przeglądarki IE10 i nowsze oraz przeglądarki inne niż IE, możesz użyć tego warunkowego komentarza:

<!--[if gt IE 9]><!--> Your code here. <!--<![endif]-->

Pochodzi z http://www.paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither

user1003757
źródło
1
Nie mam -1 twojej odpowiedzi, ale link wydaje się nieco przestarzały - osiem - . Warto również zauważyć, że PO miał być ukierunkowany wyłącznie na IE10 i IE10. Niezależnie od tego, Twój fragment kodu nie będzie działał ani w IE10 i nowszych, ani w żadnej innej przeglądarce innej niż IE, ponieważ komentarze warunkowe są obsługiwane tylko w IE5 do IE9.
WynandB,
-2

Jeśli naprawdę musisz, możesz sprawić, by komentarze warunkowe działały, dodając następujący wiersz do <head>:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">

Źródło

nyuszika7h
źródło
-4

nowoczesne rozwiązanie dla css

html[data-useragent*='MSIE 10.0'] .any {
  your-style: here;
}
Raphael
źródło