Dlaczego program Internet Explorer 11 nie obsługuje komentarzy warunkowych, nawet jeśli emuluje tryb dokumentu programu Internet Explorer 8?

110

Używam nowych narzędzi programistycznych Internet Explorer 11 , aby przełączyć tryb dokumentu na „8”, ale komentarze warunkowe są nadal ignorowane, to znaczy nie są prawidłowo analizowane i zachowują się jak normalne komentarze. Dlatego przeglądarka nie żąda / nie ładuje żadnego pliku, do którego istnieje odniesienie w komentarzu warunkowym.

Dlaczego to się dzieje? Czy to błąd?

Jeśli uważasz, że jest to rzeczywiście błąd, który należy naprawić, wejdź i powiedz, że również możesz to odtworzyć w raporcie o błędzie firmy Microsoft zgłoszonym dla tego problemu:
Komentarze warunkowe nie działają podczas emulacji trybów dokumentów za pomocą F12 Developer Narzędzia .

Aktualizacja: zgłoszono, że ten problem został naprawiony we wspomnianym zgłoszeniu błędu.

thasmo
źródło
18
Zadaję sobie to samo pytanie! Wiem, że odrzucili warunkowe komentarze w IE10, ale IMHO emulator powinien wziąć je pod uwagę podczas testowania dla starszych przeglądarek.
Alexander Rechsteiner,
12
Rzeczywiście, sprawia to, że funkcja jest bezużyteczna.
thasmo
3
Prawdziwe pytanie brzmi: dlaczego używasz trybu zgodności? Radzę unikać trybu kompatybilności, takiego jak plaga. Z pewnością nie nadaje się do testowania, niezależnie od problemu, który opisałeś, ponieważ są znane błędy i dziwactwa, które sięgają czasów, gdy po raz pierwszy wprowadzono tryb zgodności. Jeśli testujesz zgodność z poprzednimi wersjami, naprawdę musisz użyć prawdziwej kopii IE8 (i IE9 itp.). Przejdź do modern.ie i pobierz maszyny wirtualne, które udostępniają do testowania.
Spudley
19
W narzędziu do śledzenia błędów przeglądarki IE jest otwarty błąd. Zachęcam wszystkich do odwiedzenia i poinformowania firmy Microsoft, że możesz to odtworzyć. connect.microsoft.com/IE/feedback/details/806767/…
Evgeny
15
Myślę, że używanie trybu zgodności do testowania ma większy sens niż pobieranie mniej więcej 1/2 gigabajta obrazu dla każdej przeglądarki. Są więc błędy (i to prawdopodobnie jeden z nich), ale w 99% przypadków po prostu działa.
Rolf

Odpowiedzi:

29

według doJacob Rossi [MSFT]

Powinno to zostać naprawione w aktualizacji 1 dla IE11, wydanej w zeszłym tygodniu .

To zostało opublikowane 22 kwietnia 2014 r.

Po przeprowadzeniu kilku testów wydaje się, że problem został naprawiony i wszystko znów działa płynnie, aby przetestować najbardziej niesamowitą przeglądarkę, jaką kiedykolwiek wyprodukowano ... Internet Explorer!

L84
źródło
4
To wymaga więcej głosów. Musiałem przekopać się przez dwie odpowiedzi dotyczące przepełnienia stosu, aby się tu dostać.
Tek
@Lynda: Czy możesz opublikować swoją wersję IE11? mój to 11.0.9600.17631
Mohamed Hussain
1
@MohamedHussain - Moja wersja to 11.0.9600.17690IC.
L84
3
MUSISZ być sarakastyczny.
paddotk
Czy IE jest „najbardziej niesamowitą przeglądarką”?
paddotk
20

Właśnie próbowałem użyć tego w przeglądarce Internet Explorer 11 w systemie Windows 7, aby upewnić się, że moje używane elementy semantyczne HTML5 zostały utworzone dla przeglądarki Internet Explorer 8 i starszych (za pośrednictwem komentarzy warunkowych), a przeglądarka po prostu je ignoruje. -_-

Ta funkcja działała doskonale w przeglądarce Internet Explorer 10 , a Microsoft musiał po prostu przy niej majstrować, prawda?

<!--[if lte IE 8]><script src="ie8-html5.js"></script><![endif]-->

Poza tym lubię przeglądarkę Internet Explorer, co stanowi zmianę.

DylRicho
źródło
4
Tak, IE 11 jest lepszym doświadczeniem, ze wszystkimi animacjami, które faktycznie działają :). Tak, MS ma historię „majsterkowania” przy różnych rzeczach, gdy użytkownicy zaczynają się do nich przyzwyczajać. Spójrz, co zrobili z Windows XP ... „Naprawianie tego, co nie jest zepsute”, niektórzy powiedzą. W każdym razie to jest do bani
Rolf
9
Przeglądarki Internet Explorer są takie złe. Brak spójności między wersjami. Kto do diabła to rozwinął? nawet moja babcia mogłaby zrobić lepszą robotę!
Adrien Be
4
EDYCJA: naprawiają to (lub próbują) od 22 stycznia 2014 connect.microsoft.com/IE/feedback/details/806767/…
Adrien Be
@AdrienBe Cóż, to z pewnością krok we właściwym kierunku.
DylRicho
1
@Anthony Moja odpowiedź jest nieprawidłowa? Jak to? Zasadniczo chodzi o mówienie tego, co właśnie powiedziałeś.
DylRicho
17

To zadziałało dla mnie i wydaje się najbardziej eleganckim / łatwym rozwiązaniem (wydaje mi się, że Internet Explorer 10 i Internet Explorer 11 są jedynymi obsługiwanymi przeglądarkami -ms-high-contract):

@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {  
   /* IE10+ specific styles go here */
}
cmartin
źródło
Wspaniale, dziękuje. Kiedy Microsoft zamierza zabić tę mieszankę?
Kohjah Breese
Cóż za to, IE 11 nie przestrzega starej metody warunkowej. <! - [jeśli IE]>
Gino,
8

Niedawno napotkałem ten sam problem. Zauważyłem również, że działają niektóre komentarze warunkowe:

  • gti ltdziałało dobrze
  • gtei ltenigdy nie pracował

Zatem jednym z potencjalnych rozwiązań byłaby zmiana instrukcji warunkowych tak, aby używały operatorów gti lt.

Inną alternatywą, która okazała się bardziej użyteczna, było skorzystanie z usługi takiej jak browserstack .

user1429980
źródło
8

Mam na to inne rozwiązanie.

Internet Explorer 11 z włączonym trybem zgodności Internet Explorer 8 zawiera ciąg „MSIE 8.0”, więc:

(Przykład PHP)

if (strpos($_SERVER['HTTP_USER_AGENT'],'MSIE 8.0') !== false) {
    $head[] = sprintf('<link rel="stylesheet" href="ie8.css" />');
}
Andrei Konstantinov
źródło
2
Przetestowałem tryby dokumentów i wygląda na to, że nie zmieniałem agenta użytkownika ?!
mgutt
@mgutt Masz rację. Istnieją dwie opcje w emulacji - tryb dokumentu i agent użytkownika. Tryb dokumentu zmienia sposób działania przeglądarki i sposób renderowania strony, a agent użytkownika zmienia przeglądarkę informującą witrynę o wersji przeglądarki. (w moim przykładzie jest to zmienna $ _SERVER ['HTTP_USER_AGENT'], która zawiera te informacje) Więc w zasadzie musisz zmienić obie te opcje na przykład na IE8.
Andrei Konstantinov
@ Andrew Dziękuję. Teraz znalazłem ustawienie. Problemem było niemieckie tłumaczenie. Przetłumaczyli „agent użytkownika” na „Zeichenfolge des Benutzer-Agents” i pomyślałem, że to oznacza zestaw znaków. Niektórych rzeczy nie należy tłumaczyć;)
mgutt
2
To najlepsze rozwiązanie. Przekonwertowałem go na ASP.NET MVC Razor i działa idealnie: @ {if (Request.UserAgent.Contains ("MSIE 8.0")) {/ * tutaj twój metatag * /}}
Valerio Gentile,
Ta witryna jest przydatnym źródłem informacji o tym, jak wyglądają wszystkie permutacje ciągów agentów użytkownika: useragentstring.com/pages/Internet%20Explorer
Drew
4

Miałem ten sam problem - przez cały ranek doprowadzał mnie do szału. Dodałem Modernizr i wybrałem wszystkie opcje, w tym yepnope.js.

Więc teraz mój test wygląda tak:

Modernizr.load({
            test: Modernizr.canvas,
            nope: ['Content/Site-ie-8.min.css', 'Content/font-awesome-ie7.min.css']
});

W tym przypadku testuję pod kątem kanwy (która nie jest obsługiwana przed Internet Explorerem 9), więc ładuję zawartość warunkową. Działa to teraz podczas przełączania trybów przeglądarki w narzędziach programistycznych programu Internet Explorer 11.

El Kabong
źródło
Komentarze warunkowe nie opierają się na skrypcie ani na kodzie strony trzeciej.
Walf,
@Walf - prawda, ale nie są również obsługiwane w IE. Zobacz tutaj: msdn.microsoft.com/en-us/library/ie/hh801214(v=vs.85).aspx
El Kabong
3

Nie widziałem tego tutaj, ale w tym zgłoszeniu błędu zauważono, że jeśli zmienisz ustawienia widoku zgodności, komentarze warunkowe będą działać zgodnie z oczekiwaniami. Więc:

  1. W przeglądarce IE11 kliknij „Narzędzia”
  2. Ustawienia widoku zgodności
  3. Wpisz adres URL i kliknij Dodaj

Wydaje się, że teraz działa dobrze na moim hoście lokalnym. Nie testowałem tego obszernie ale może komuś to pomoże.

Just Plain High
źródło
Ale użytkownicy Twojej witryny musieliby zrobić to samo, aby uzyskać ten sam wynik. Bezużyteczne.
paddotk
Tak. Ale to jest, jeśli testujesz starsze wersje IE za pomocą narzędzi programistycznych IE11. Więc używając IE11, ale działającego jako IE8, warunkowe komentarze nie będą działać. Dla kogoś, kto faktycznie używa IE8, komentarze warunkowe będą działać. Prawdopodobnie ^ _ ^
Just Plain High
1

Niektóre komentarze warunkowe, takie jak „ gt” i „ lt”, działają, ale na przykład <!--[if IE 8]>nie działają. Z pewnością jest to niewygodne dla programistów, którzy chcą sprawdzić, jak ich strony internetowe wyglądają w różnych wersjach przeglądarek Internet Explorer, ale to nie wszystko jest złe.

Chociaż warunkowe komentarze nie działają, nadal możesz przetestować wygląd strony internetowej w każdej z wersji Internet Explorera, dołączając arkusze stylów jeden po drugim: załóżmy, że masz arkusz stylów dla przeglądarki Firefox, Chrome, Internet Explorer 10 i Internet Explorer 11 o nazwie „ screen.css”, a inny arkusz stylów o nazwie „ screen-ie9.css” TYLKO dla przeglądarki Internet Explorer 9, a inny arkusz TYLKO dla przeglądarki Internet Explorer 8 o nazwie „ screen-ie8.css”.

Aby przetestować swoje strony internetowe TYLKO pod kątem przeglądarki Internet Explorer 9, możesz to zrobić:

<link rel="stylesheet" href="path/css/screen.css"     type="text/css" />
<link rel="stylesheet" href="path/css/screen-ie9.css" type="text/css" />

aw narzędziach deweloperskich F12 w sekcji Emulacja ustaw „Tryb dokumentu” na „9”, a „Ciąg agenta użytkownika” na „Internet Explorer 9”. Tryb dokumentu to standard używany przez Internet Explorer 9, a ciąg agenta użytkownika to sama przeglądarka.

PS: Zakładam, że „ screen.css” jest twoim podstawowym arkuszem stylów i jest powodem, dla którego nazywam go najpierw niż „nadpisywanie” poprawek Internet Explorera 9 później, wywołując „ screen-ie9.css” drugie.

Robiąc to, możesz być „pewien” (muszę przetestować maszyny wirtualne, aby napisać słowo „pewny” bez cudzysłowu), że przeglądasz swoją stronę internetową w przeglądarce Internet Explorer 9. Po zakończeniu testowania i określania stylu w przeglądarce Internet Explorer 9 i zechcesz przetestować w przeglądarce Internet Explorer 8, możesz łatwo zrobić tę samą sztuczkę, zastępując to:

<link rel="stylesheet" href="path/css/screen-ie9.css" type="text/css" />

z tym:

<link rel="stylesheet" href="path/css/screen-ie8.css" type="text/css" />

Jest to więc tylko kwestia MNIEJSZYCH niedogodności ze strony Microsoftu, ALE nowe narzędzia programistów F12 oferują WIELE niesamowitych funkcji, co sprawia, że ​​nie jest to aż tak wielka sprawa.

Roben B.
źródło