5

Mam stronę internetową wyświetlającą ostrzeżenie, jeśli używasz nieobsługiwanej przeglądarki, IE < = 8. Działa to dobrze w IE 8 i poniżej, jednak dzisiaj testowałem w IE 10 i wydaje się, że przeczytałem to również warunkowo. Pokazuje komunikat ostrzegawczy, gdy nie powinien. Próbowałem wielu rzeczy, ale nie wiem, jaki może być problem. Oto niektóre z kodu:IE10 czyta warunkowe komentarze IE8

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0" /> 
    <meta http-equiv="X-UA-Compatible" content="chrome=1"/> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/> 
... 
</head> 
<!--[if lte IE 8]> 
    <div style="position:absolute;bottom:0px;left:0px;background-color:orange;color:white;z-index:1000;width:250px;text-align:center;">This content is best viewed in Chrome, Firefox or any other Modern Browser. <br/><strong>Please Upgrade. </strong></div> 
<![endif]--> 
+0

Czy odpowiada również na IE 10? Czy mógłbyś stworzyć warunek 'IE 8, a nie IE 10'? – Renan

+6

@Renan: Problem polega na tym, że IE10 nie powinien w ogóle wyświetlać uwag warunkowych *. – BoltClock

+0

(Widzi je, ale nie powinno próbować ich interpretować). – BoltClock

Odpowiedz

4

Stab w ciemności, ale może IE jest uzyskiwanie mylona przez swoich dwóch X-UA-Compatible nagłówków i tak spada z powrotem do widoku zgodności z własnej woli. Jest to jedyna sytuacja, dla której IE10 może przetwarzać warunkowe komentarze zamiast ignorować je wprost, ponieważ w widoku zgodności emuluje IE7, który jest lte IE 8, a więc zbiera treści ukryte przez ten warunkowy komentarz.

Zobacz, co się dzieje, jeśli połączyć je w jeden <meta> tagu:

<meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" /> 
+0

Szczerze mówiąc, nie widzę żadnego powodu, dla którego tak czy inaczej mam wpis do Chrome; Chrome nie zwraca na to uwagi, a nawet gdyby tak było, dlaczego chciałbyś, aby naśladowała Chrome w wersji 1? – Spudley

+0

@Spudley: Ten wpis dotyczy ramki Chrome; 1 oznacza wymuszanie IE, aby działał jak Chrome, gdy wtyczka jest dostępna. – BoltClock

+0

Cóż, Chrome Frame również jest przestarzała, ale myślałem, że użył 'frame = 1' .... hmmm, może masz rację. minęło trochę czasu odkąd go użyłem. – Spudley

2

„Komentarze warunkowe” funkcja została usunięta z IE 10, zgodnie z dokumentem Conditional comments Microsoft. Oznacza to, że IE 10 pomija "komentarz warunkowy" jako zwykły komentarz (który jest zgodny ze specyfikacjami HTML).

Zostało to potwierdzone przez moje testowanie kodu w pytaniu na IE 10. Nie pojawia się okno z ostrzeżeniem, niezależnie od ustawień trybu przeglądarki. Wydaje się prawdopodobne, że na prawdziwej stronie występuje błąd składniowy, który powoduje, że jakiś tekst pojawia się jako normalna treść, a nie "komentarz warunkowy".

+1

Interesujące, więc nie ma wtedy tego widoku vorozidełka kompatybilności. (Musiałem zgadywać, bo nie mam w tej chwili możliwości testowania, z żalem). – BoltClock

0

Więc już debugowałem i próbowałem naprawić kod, żeby działał i myślę, że dwie rzeczy mogły go naprawić.
Po pierwsze: komentarz warunkowy został zadeklarowany przed otwarciem znacznika body i domyślam się, że ponieważ jest to element div, musi być zawarty w znaczniku body. Przeniesienie go do wnętrza ciała mogło go naprawić.
Po drugie: Miałem też tag skryptu z nagłówkiem dokumentu, w którym było trochę skryptów jQuery. Przeniesienie tego tagu na koniec tagu body również może rozwiązać problem.