Perché Internet Explorer 11 non rispetta i commenti condizionali anche durante l'emulazione della modalità documento di Internet Explorer 8?


110

Sto utilizzando i nuovi strumenti di sviluppo di Internet Explorer 11 per cambiare la modalità documento su "8", ma i commenti condizionali vengono comunque ignorati, ovvero non vengono analizzati correttamente e si comportano come normali commenti. Quindi qualsiasi file referenziato all'interno del commento condizionale non viene richiesto / caricato dal browser.

Perché succede questo? E 'un errore?

Se pensi che questo sia davvero un bug che deve essere corretto, per favore entra e dì che anche tu puoi riprodurlo nella segnalazione di bug di Microsoft che viene segnalata per questo problema:
I commenti condizionali non funzionano quando si emulano le modalità del documento tramite F12 Developer Strumenti .

Aggiornamento: questo problema è stato segnalato per essere risolto nella segnalazione di bug menzionata.


18
Fandomi la stessa domanda! So che hanno lasciato cadere i commenti condizionali in IE10 ma IMHO l'emulatore dovrebbe considerarli durante il test per i browser meno recenti.
Alexander Rechsteiner

12
In effetti, questo rende la funzione inutilizzabile.
thasmo

3
La vera domanda è: perché stai usando la modalità di compatibilità? Il mio consiglio è di evitare la modalità compat come la peste. Certamente non è adatto per i test, indipendentemente dal problema che hai descritto, poiché sono noti bug e stranezze che risalgono a quando hanno introdotto per la prima volta la modalità compatibilità. Se stai testando la compatibilità con le versioni precedenti, devi davvero usare una copia reale di IE8 (e IE9, ecc.). Vai su modern.ie e scarica le VM fornite per il test.
Spudley

19
C'è un bug aperto su IE bug tracker. Incoraggio tutti a visitare e dire a Microsoft che puoi riprodurlo. connect.microsoft.com/IE/feedback/details/806767/…
Evgeny

15
Penso che utilizzare la modalità di compatibilità per i test abbia più senso che scaricare un'immagine da 1/2 gigabyte o giù di lì per ogni browser. Quindi ci sono bug, (e questo è probabilmente uno di loro), ma il 99% delle volte funziona e basta.
Rolf

Risposte:


29

secondo aJacob Rossi [MSFT]

Questo dovrebbe essere risolto nell'aggiornamento 1 per IE11, rilasciato la scorsa settimana .

È stato pubblicato il 22 aprile 2014.

Eseguendo personalmente alcuni test, sembra che questo sia stato risolto e che tutto funzioni di nuovo senza intoppi per testare il browser più sorprendente mai prodotto ... Internet Explorer!


4
Questo deve essere votato di più. Ho dovuto scavare tra due risposte di overflow dello stack solo per arrivare qui.
Tek

@ Lynda: potresti pubblicare la tua versione di IE11? il mio è 11.0.9600.17631
Mohamed Hussain

1
@ MohamedHussain - La mia versione è 11.0.9600.17690IC.
L84

3
DEVI essere saracastico.
paddotk

Riguardo a IE che è il "browser più sorprendente"?
paddotk

20

Ho appena provato a utilizzarlo in Internet Explorer 11 su Windows 7 per assicurarmi che i miei elementi semantici HTML5 utilizzati venissero creati per Internet Explorer 8 e versioni precedenti (tramite commenti condizionali) e il browser li ignori semplicemente. -_-

Questa funzione funzionava perfettamente in Internet Explorer 10 e Microsoft doveva solo armeggiare con essa, non è vero?

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

A parte questo, mi piace davvero Internet Explorer, il che rappresenta un cambiamento.


4
Sì, IE 11 è un'esperienza migliore, con tutte le animazioni che funzionano davvero :). Sì, MS ha una storia di "armeggiare" con le cose proprio quando gli utenti iniziano ad abituarsi. Guarda cosa hanno fatto a Windows XP ... "Riparare ciò che non è rotto", direbbero alcune persone. Comunque che fa schifo
Rolf

9
I browser Internet Explorer sono così pessimi. Nessuna coerenza tra le versioni. Chi diavolo ha sviluppato questo? anche mia nonna potrebbe fare un lavoro migliore!
Adrien Be

4
EDIT: stanno risolvendo questo (o provando) dal 22 gennaio 2014 connect.microsoft.com/IE/feedback/details/806767/…
Adrien Be

@AdrienBe Beh, questo è sicuramente un passo nella giusta direzione.
DylRicho

1
@Anthony La mia risposta non è corretta? Come mai? In pratica sta dicendo quello che hai appena detto.
DylRicho

17

Questo ha funzionato per me e sembra la soluzione più elegante / facile ( Internet Explorer 10 e Internet Explorer 11 immagino siano gli unici browser che supportano -ms-high-contract):

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

Eccellente grazie. Quando Microsoft ucciderà questo guazzabuglio?
Kohjah Breese

Tank per questo, IE 11 non rispetta il vecchio metodo condizionale. <! - [if IE]>
Gino

8

Recentemente ho riscontrato lo stesso problema. Ho anche scoperto che alcuni commenti condizionali funzionano:

  • gte ha ltfunzionato bene
  • gtee ltenon ha mai funzionato

Quindi una possibile soluzione sarebbe modificare le istruzioni condizionali per utilizzare gli operatori gte lt.

L'altra alternativa, che ho trovato più utile, è stata quella di utilizzare un servizio come browserstack .


8

Ho un'altra soluzione per questo.

Internet Explorer 11 con la modalità di compatibilità di Internet Explorer 8 attivata contiene la stringa "MSIE 8.0", quindi:

(Esempio PHP)

if (strpos($_SERVER['HTTP_USER_AGENT'],'MSIE 8.0') !== false) {
    $head[] = sprintf('<link rel="stylesheet" href="ie8.css" />');
}

2
Ho testato le modalità del documento e sembra che non cambi il programma utente ?!
mgutt

@mgutt Hai ragione. Ci sono due opzioni in Emulazione: modalità Documento e Agente utente. La modalità documento cambia il funzionamento del browser e il rendering della pagina e l'agente utente cambia il browser che comunica al sito la versione del browser. (nel mio esempio è la variabile $ _SERVER ['HTTP_USER_AGENT'] che contiene queste informazioni) Quindi fondamentalmente è necessario modificare entrambe queste opzioni, ad esempio, in IE8.
Andrei Konstantinov

@ Andrew Grazie. Ora ho trovato l'ambientazione. Il problema era la traduzione tedesca. Hanno tradotto "user agent" con "Zeichenfolge des Benutzer-Agents" e ho pensato che questo significasse il set di caratteri. Alcune cose non dovrebbero essere tradotte;)
mgutt

2
Questa soluzione è la migliore. L'ho convertito in ASP.NET MVC Razor e funziona perfettamente: @ {if (Request.UserAgent.Contains ("MSIE 8.0")) {/ * your metatag here * /}}
Valerio Gentile

Questo sito è un pratico riferimento per l'aspetto di tutte le permutazioni delle stringhe dell'agente utente: useragentstring.com/pages/Internet%20Explorer
Drew

4

Ho avuto lo stesso problema: mi ha fatto impazzire per tutta la mattina. Ho aggiunto Modernizr e ho selezionato tutte le opzioni, incluso yepnope.js.

Quindi ora il mio test assomiglia a questo:

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

In questo caso provo la tela (che non è supportata prima di Internet Explorer 9), quindi carico il mio contenuto condizionale. Ora funziona quando si cambia la modalità del browser negli strumenti di sviluppo di Internet Explorer 11.


I commenti condizionali non si basano su script o codice di terze parti.
Walf

@ Walf - vero, ma non sono supportati in IE. Vedi qui: msdn.microsoft.com/en-us/library/ie/hh801214(v=vs.85).aspx
El Kabong

3

Non l'ho visto menzionato qui, ma in questa segnalazione di bug si nota che, se si modificano le impostazioni di visualizzazione della compatibilità, i commenti condizionali funzionano come previsto. Così:

  1. In IE11, fai clic su "Strumenti"
  2. Impostazioni di Visualizzazione Compatibilità
  3. Digita l'URL e fai clic su Aggiungi

Sembra funzionare bene ora sul mio localhost. Non l'ho testato ampiamente ma forse aiuterà qualcuno.


Ma i visitatori del tuo sito web dovrebbero fare lo stesso per ottenere lo stesso risultato. Rendendolo inutile.
paddotk

Sì. Ma questo è per se stai testando versioni precedenti di IE tramite gli strumenti di sviluppo di IE11. Quindi utilizzando IE11 ma funzionando come IE8, i commenti condizionali non funzioneranno. Per qualcuno che utilizza effettivamente IE8, i commenti condizionali funzioneranno. Probabilmente ^ _ ^
Just Plain High

1

Alcuni commenti condizionali funzionano come " gt" e " lt", ma ad esempio <!--[if IE 8]>non funzionano. Questo è sicuramente scomodo per gli sviluppatori che vogliono provare l'aspetto delle loro pagine web su diverse versioni dei browser Internet Explorer, ma non sono tutte brutte notizie.

Sebbene i commenti condizionali non funzionino, puoi comunque testare l'aspetto della tua pagina web in ciascuna delle versioni di Internet Explorer aggiungendo i fogli di stile uno alla volta: supponiamo che tu abbia un foglio di stile per Firefox, Chrome, Internet Explorer 10 e Internet Explorer 11 chiamato " screen.css", e un altro foglio di stile SOLO per Internet Explorer 9 chiamato " screen-ie9.css" e un altro SOLO per Internet Explorer 8 chiamato " screen-ie8.css".

Per testare le tue pagine web SOLO per Internet Explorer 9, puoi farlo:

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

e negli strumenti per sviluppatori F12, sezione Emulazione, impostare "Modalità documento" su "9" e "Stringa agente utente" su "Internet Explorer 9". La modalità documento è lo standard utilizzato da Internet Explorer 9 e la stringa agente utente è il browser stesso.

PS: presumo che " screen.css" sia il tuo foglio di stile di base, motivo per cui lo chiamo prima di "sovrascrivere" le correzioni di Internet Explorer 9 in seguito chiamando " screen-ie9.css" secondo.

In questo modo, puoi essere "sicuro" (devo testare con le VM per scrivere la parola "sicuro" senza virgolette) che stai visualizzando la tua pagina web su un browser Internet Explorer 9. Dopo aver eseguito il test e lo stile su Internet Explorer 9 e desideri eseguire il test con Internet Explorer 8, puoi facilmente eseguire lo stesso trucco sostituendo questo:

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

con questo:

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

Quindi, è solo una questione di MINORI inconvenienti da parte di Microsoft, MA i nuovi strumenti degli sviluppatori F12 offrono MOLTE funzionalità sorprendenti, il che rende questo non un grosso problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.