Por que o Internet Explorer 11 não honra os comentários condicionais, mesmo quando emula o modo de documento do Internet Explorer 8?

110

Estou usando as novas ferramentas de desenvolvedor do Internet Explorer 11 para mudar o modo de documento para "8", mas os comentários condicionais ainda são ignorados, ou seja, eles não são analisados ​​corretamente e se comportam como comentários normais. Portanto, qualquer arquivo referenciado dentro do comentário condicional não é solicitado / carregado pelo navegador.

Por que isso acontece? É um bug?

Se você acha que este é realmente um bug que precisa ser corrigido, entre e diga que você também pode reproduzi-lo no relatório de bug da Microsoft relatado para este problema:
Comentários condicionais não funcionam ao emular modos de documento por meio do Desenvolvedor F12 ferramentas .

Atualização: Este problema foi relatado para ser corrigido no relatório de bug mencionado.

thasmo
fonte
18
Me perguntando a mesma coisa! Eu sei que eles abandonaram os comentários condicionais no IE10, mas IMHO, o emulador deve considerá-los ao testar navegadores mais antigos.
Alexander Rechsteiner
12
Na verdade, isso torna o recurso inutilizável.
thasmo
3
A verdadeira questão é por que você está usando o modo de compatibilidade? Meu conselho é evitar o modo compat como uma praga. Certamente não é adequado para teste, independentemente do problema que você descreveu, pois existem bugs e peculiaridades conhecidos que remontam a quando eles introduziram o modo de compatibilidade pela primeira vez. Se você está testando a compatibilidade com versões anteriores, você realmente precisa usar uma cópia real do IE8 (e IE9, etc). Acesse modern.ie e baixe as VMs que eles fornecem para teste.
Spudley
19
Há um bug aberto no bug tracker do IE. Eu encorajo todos a visitar e dizer à Microsoft que você pode reproduzir isso. connect.microsoft.com/IE/feedback/details/806767/…
Evgeny
15
Acho que usar o modo de compatibilidade para teste faz mais sentido do que baixar uma imagem de 1/2 gigabyte ou mais para cada navegador. Portanto, há bugs (e este provavelmente é um deles), mas 99% das vezes simplesmente funciona.
Rolf

Respostas:

29

De acordo comJacob Rossi [MSFT]

Isso deve ser corrigido na atualização 1 para o IE11, lançada na semana passada .

Isso foi postado em 22 de abril de 2014.

Ao executar alguns testes, parece que isso foi corrigido e tudo está funcionando perfeitamente novamente para testar o navegador mais incrível já produzido ... Internet Explorer!

L84
fonte
4
Isso precisa ser mais votado. Tive que vasculhar duas respostas de estouro de pilha apenas para chegar aqui.
Tek
@Lynda: Você poderia postar sua versão do IE11? o meu é 11.0.9600.17631
Mohamed Hussain
1
@MohamedHussain - Minha versão é 11.0.9600.17690IC.
L84
3
Você DEVE ser sarcástico.
Paddotk
Sobre o IE ser o 'navegador mais incrível'?
paddotk
20

Eu apenas tentei usar isso no Internet Explorer 11 no Windows 7 para ter certeza de que meus elementos semânticos HTML5 usados estavam sendo criados para o Internet Explorer 8 e inferior (por meio de comentários condicionais), e o navegador simplesmente os ignorou. -_-

Esse recurso funcionou perfeitamente bem no Internet Explorer 10 , e a Microsoft teve que mexer nele, não foi?

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

Além disso, estou gostando do Internet Explorer, o que é uma mudança.

DylRicho
fonte
4
Sim, o IE 11 é uma experiência melhor, com todas as animações que realmente funcionam :). Sim, a MS tem um histórico de "mexer" com as coisas apenas quando os usuários estão começando a se acostumar com elas. Veja o que eles fizeram com o Windows XP ... "Consertando o que não está quebrado", diriam algumas pessoas. De qualquer forma isso é uma merda
Rolf
9
Os navegadores Internet Explorer são muito ruins. Sem consistência entre as versões. Quem diabos desenvolveu isso? até minha avó poderia fazer um trabalho melhor!
Adrien Be
4
EDITAR: eles estão consertando isso (ou tentando) desde 22 de janeiro de 2014 connect.microsoft.com/IE/feedback/details/806767/…
Adrien Be
@AdrienBe Bem, isso certamente é um passo na direção certa.
DylRicho
1
@Anthony Minha resposta está incorreta? Como assim? É basicamente dizer o que você acabou de dizer.
DylRicho
17

Isso funcionou para mim e parece ser a solução mais elegante / fácil ( Internet Explorer 10 e Internet Explorer 11 , acho que são os únicos navegadores que suportam -ms-high-contract):

@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {  
   /* IE10+ specific styles go here */
}
Cmartin
fonte
Excelente, obrigado. Quando a Microsoft vai acabar com essa confusão?
Kohjah Breese
Tanque para isso, o IE 11 não honra o antigo método condicional. <! - [if IE]>
Gino
8

Recentemente, tive o mesmo problema. Também descobri que alguns comentários condicionais funcionam:

  • gte ltfuncionou bem
  • gtee ltenunca funcionou

Portanto, uma solução potencial seria alterar as instruções condicionais para usar os operadores gte lt.

A outra alternativa, que achei mais útil, era usar um serviço como o browserstack .

user1429980
fonte
8

Eu tenho outra solução para isso.

Internet Explorer 11 com o modo de compatibilidade do Internet Explorer 8 ativado contém a string 'MSIE 8.0', portanto:

(Exemplo de PHP)

if (strpos($_SERVER['HTTP_USER_AGENT'],'MSIE 8.0') !== false) {
    $head[] = sprintf('<link rel="stylesheet" href="ie8.css" />');
}
Andrei Konstantinov
fonte
2
Eu testei os modos de documento e parece não mudar o agente do usuário ?!
mgutt
@mgutt Você está certo. Existem duas opções em emulação - modo de documento e agente do usuário. O modo de documento muda a forma como o navegador funciona e como ele renderiza a página, e o Agente do usuário muda o navegador que informa ao site sobre a versão do navegador. (no meu exemplo, é a variável $ _SERVER ['HTTP_USER_AGENT'] que contém essas informações). Basicamente, você precisa alterar essas opções para, por exemplo, o IE8.
Andrei Konstantinov
@ Andrew Obrigado. Agora encontrei a configuração. O problema era a tradução para o alemão. Eles traduziram "user agent" com "Zeichenfolge des Benutzer-Agents" e eu pensei que isso significava o charset. Algumas coisas não devem ser traduzidas;)
mgutt
2
Essa solução é a melhor. Converti-o para ASP.NET MVC Razor e funciona perfeitamente: @ {if (Request.UserAgent.Contains ("MSIE 8.0")) {/ * sua metatag aqui * /}}
Valerio Gentile
Este site é uma referência útil para saber
Drew
4

Eu tive o mesmo problema - me deixou maluco a manhã toda. Eu adicionei Modernizr e selecionei todas as opções, incluindo yepnope.js.

Então agora meu teste se parece com este:

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

Nesse caso, eu testo a tela (que não é compatível antes do Internet Explorer 9), então carrego meu conteúdo condicional. Isso agora funciona ao alternar os modos do navegador nas ferramentas de desenvolvedor do Internet Explorer 11.

El Kabong
fonte
Comentários condicionais não dependem de script ou qualquer código de terceiros.
Walf
@Walf - true, mas eles também não são suportados no IE. Veja aqui: msdn.microsoft.com/en-us/library/ie/hh801214(v=vs.85).aspx
El Kabong
3

Eu não vi isso mencionado aqui, mas neste relatório de bug é observado que, se você alterar as configurações de visualização de compatibilidade, os comentários condicionais funcionam como esperado. Assim:

  1. No IE11, clique em "Ferramentas"
  2. Configurações de visualização de compatibilidade
  3. Digite o URL e clique em Adicionar

Parece estar funcionando bem agora no meu host local. Não testei extensivamente, mas talvez ajude alguém.

Just Plain High
fonte
Mas os visitantes do seu site teriam que fazer o mesmo para obter o mesmo resultado. Tornando-o inútil.
Paddotk
Sim. Mas isso é para se você estiver testando versões anteriores do IE por meio das ferramentas de desenvolvedor do IE11. Portanto, usando o IE11, mas executando como IE8, os comentários condicionais não funcionarão. Para alguém que realmente usa o IE8, os comentários condicionais funcionarão. Provavelmente ^ _ ^
Just Plain High,
1

Alguns dos comentários condicionais estão funcionando, como ' gt' e ' lt', mas <!--[if IE 8]>não estão funcionando , por exemplo . Isso certamente é inconveniente para desenvolvedores que desejam testar a aparência de suas páginas da Web em diferentes versões dos navegadores Internet Explorer, mas nem tudo é uma má notícia.

Embora os comentários condicionais não estejam funcionando, você ainda pode testar a aparência de sua página da web em cada uma das versões do Internet Explorer anexando as folhas de estilo uma de cada vez: digamos que você tenha uma folha de estilo para Firefox, Chrome, Internet Explorer 10 e Internet Explorer 11 chamada ' screen.css', e outra folha de estilo SOMENTE para Internet Explorer 9 chamada ' screen-ie9.css' e outra SOMENTE para Internet Explorer 8 chamada 'screen-ie8.css '.

Para testar suas páginas da web SOMENTE para o Internet Explorer 9, você pode fazer o seguinte:

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

e nas ferramentas de desenvolvedor F12, seção Emulação, defina o 'Modo de documento' como '9' e a 'Sequência do agente do usuário' como 'Internet Explorer 9'. O Modo de documento é o padrão usado pelo Internet Explorer 9 e a string do agente do usuário é o próprio navegador.

PS: Estou assumindo que ' screen.css' é sua folha de estilo base, razão pela qual estou chamando-a primeiro, em vez de "sobrescrever" as correções do Internet Explorer 9 posteriormente chamando 'screen-ie9.css ' em segundo lugar.

Ao fazer isso, você pode ter "certeza" (tenho que testar com VMs para escrever a palavra 'certeza' sem aspas) de que está visualizando sua página da Web em um navegador Internet Explorer 9. Quando terminar de testar e definir estilos no Internet Explorer 9 e quiser testar com o Internet Explorer 8, você pode facilmente fazer o mesmo truque substituindo este:

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

com isso:

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

Portanto, é apenas uma questão de PEQUENO inconveniente da parte da Microsoft, MAS as novas ferramentas dos desenvolvedores F12 estão oferecendo MUITOS recursos incríveis, o que torna isso não muito grande.

Roben B
fonte