Por que o IE9 muda para o modo de compatibilidade no meu site?

197

Acabei de instalar o IE9 beta e, em um site específico que criei (HTML5), o IE9 salta para o modo de compatibilidade, a menos que seja solicitado manualmente. Eu tentei remover várias partes do site, mas nenhuma alteração. Incluindo a remoção de todas as inclusões CSS. Em algum outro site meu, tudo corre bem.

Além disso, não defina manualmente, porque o IE9 lembra a configuração do usuário e você não pode voltar para a automática (ou pelo menos não encontrei como, nem mesmo através da navegação privada e do cache de esvaziamento)

De qualquer forma. O site em que ele passa para o modo de compatibilidade: http://alliancesatwar.com/guide/
Um em que ele torna correto: http://geuze.name/basement/ (não consigo postar mais de um hiperlink)

Ambos usam o mesmo doctype e tudo. Esses sites têm muito em comum (além da aparência), usando o mesmo modelo básico (codificação, metatags, doctype e o mesmo javascript)

Seria ótimo se alguém tivesse uma resposta para mim! Um site HTML5 que é renderizado no modo IE7 é bastante ... coxo.

René
fonte
5
Por favor, explique "pula para o modo de compatibilidade"? Se você vir a atualização da página e um balão informando que o IE atualizou esta página no Modo de Exibição de Compatibilidade devido a um problema, isso significa que você encontrou um bug do IE chamado "afirmação definitiva", semelhante a uma falha no mecanismo de renderização . Estamos interessados ​​em encontrar e consertar isso; registre um bug em connect.microsoft.com/ie . Obrigado!
EricLaw

Respostas:

263

Funciona no documentMode do IE9 para mim.

Sem um X-UA-Compatiblecabeçalho / meta para definir um documentMode explícito, você obterá um modo com base em:

  • se o usuário clicou no botão 'visualização de compatibilidade' nesse domínio antes;
  • talvez também se isso aconteceu automaticamente devido a algum outro conteúdo no site, causando o travamento do renderizador do IE8 / 9 e retornando ao renderizador antigo;
  • se o usuário optou por colocar todos os sites na exibição de compatibilidade por padrão;
  • se o IE acha que o site está na sua intranet e usa como padrão a exibição de compatibilidade;
  • se o site em questão está na própria lista de sites da Microsoft que exigem exibição de compatibilidade.

Você pode alterar essas configurações em 'Ferramentas -> Configurações de exibição de compatibilidade' no menu do IE. É claro que esse menu agora está oculto, então você não o verá até pressionar Alt.

Como autor do site, se você está confiante de que seu site está em conformidade com os padrões (é renderizado bem em outros navegadores e usa o sniffing de recursos para decidir quais soluções alternativas de navegador usar), sugiro usar:

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

ou o cabeçalho HTTP:

X-UA-Compatible: IE=Edge

para obter o renderizador mais recente, independentemente da versão do IE em uso.

bobince
fonte
79
Nota importante: se o IE 9 estiver configurado para sempre mostrar sites da Intranet no modo de compatibilidade, nem a metatag nem o cabeçalho HTTP substituirão isso.
27711 Jacob
29
Como Jacob menciona, o IE pode, por padrão, exibir todos os sites locais / intranet no modo compat. Pressione alt -> Ferramentas Configurações de exibição de compatibilidade e verifique se a caixa não está marcada.
Cory Mawhorter
30
A metatag só funcionou para mim quando a coloquei logo após <head> (veja também a resposta abaixo). Quando o coloquei mais abaixo no elemento <head>, ele não funcionou (ainda recebi a página rasgada).
Boris van Schooten
13
@ Jacob: Isso é meio enganoso. Sim, você estará no modo Navegador de compatibilidade e não há saída. Mas você ainda pode usar o cabeçalho HTTP para definir o Modo de Documento no qual a versão do IE funciona melhor para o seu site. IE = Edge sempre deve fornecer o mecanismo de renderização mais recente. Portanto, mesmo se você estiver tecnicamente no modo de compatibilidade, poderá renderizar suas páginas como se estivesse no modo normal. Corrija-me se estiver errado, mas pelo menos o site da Intranet funciona exatamente assim (mesmo com a configuração "Exibir sites da intranet na exibição de compatibilidade" marcada).
Mkataja 24/08/12
7
@BorisvanSchooten: Não sei se esse é o motivo, mas as <meta>tags precisam estar dentro dos primeiros 512 bytes de um arquivo HTML processado. Eu digo "processado" porque você pode ter todos os tipos de PHP lá em cima, mas o código processado é o que é importante. Cheguei aonde coloquei todos os meus comentários <meta>abaixo das <meta>tags, para não quebrar o requisito.
doubleJ
33

Eu coloco

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

primeira coisa depois

<head>

(Eu li em algum lugar, não me lembro)

Eu não podia acreditar que funcionou !!

pkario
fonte
Você precisa fechar a guia e abrir uma nova guia, tentou isso?
Zeb
1
Ele disse que "não" não "não";)
Nathan JB
14
+1, esta é uma nota muito valiosa . Se você tiver <script>s <head>antes desta metadeclaração, (IE = borda) será ignorada.
jakub.g
22

Para forçar o IE a renderizar no modo de padrões IE9, você deve usar

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

Algumas condições podem fazer com que o IE9 entre nos modos de compatibilidade. Por padrão, isso pode ocorrer em sites da intranet.

Delan Azabani
fonte
Funciona no outro site. Então não deveria ser isso. Além disso, essa metatag é ruim, pois você deve atualizá-la manualmente sempre que houver uma nova versão do IE.
René
2
Desculpe, não consigo resolver o seu problema. No entanto, editei minha resposta para usar IE=edge, o que sempre invoca o uso do mecanismo mais recente disponível.
Delan Azabani
Sua suposição está incorreta. As demos especificam X-UA-Compatible para impedir que o IE mostre o botão Modo de Exibição de Compatibilidade, pois se o usuário o pressionar, o conteúdo do site não funcionará corretamente.
EricLaw 1/10/10
@ReneGeuze, você entendeu errado. O Edge sempre se refere à versão mais recente do IE.
neoswf
@DelanAzabani meu portal da intranet alterna para o modo de compatibilidade, mesmo eu adicionando meta tag como você sugeriu. por favor, sugira como ele poderia resolver e permanecer no exemplo de modo padrão - IE 8, IE 8 comapitibility, então eu quero IE 8 apenas.
dsi
6

Publiquei este comentário em um thread StackOverflow separado, mas achei que valia a pena repetir aqui:

Para nosso aplicativo ASP.Net interno, adicionar a tag "X-UA-Compatible" na página da web, no web.config ou no code-behind não fez absolutamente nenhuma diferença.

A única coisa que funcionou para nós foi desativar manualmente essa configuração no IE8:

insira a descrição da imagem aqui

(Suspiro.)

Esse problema parece ocorrer apenas com o IE8 e IE9 nos sites da intranet. Sites externos funcionarão bem e usarão a versão correta do IE8 / 9, mas, para sites internos, o IE9 decidirá repentinamente que na verdade é o IE7 e não tem suporte para HTML5.

Não, eu também não entendo essa lógica.

Minha solução relutante foi testar se o navegador tem suporte para HTML 5 (criando uma tela e testando se é válido) e exibindo esta mensagem ao usuário se não for válida:

insira a descrição da imagem aqui

Não é particularmente fácil de usar, mas fazer com que o usuário desative essa configuração irritante parece ser a única maneira de permitir que eles executem aplicativos da Web HTML 5 internos adequadamente.

Ou peça aos usuários que usem o Chrome. ;-)

Mike Gledhill
fonte
1

O site em http://www.HTML-5.com/index.html possui a meta tag X-UA-Compatible, mas ainda entra no Modo de Exibição de Compatibilidade, conforme indicado pelo ícone "página rasgada" na barra de endereços. Como você obtém a opção de menu para forçar o IE 9 (versão final 9.0.8112.16421) a renderizar uma página no modo de padrões? Tentei clicar com o botão direito do mouse no ícone da página rasgada e no truque da tecla "Alt" para exibir as opções de menu adicionais mencionadas por Rene Geuze, mas elas não funcionaram.

Rob na TVSeries.com
fonte
4
Remova o comentário condicional do IE em torno da meta. Você está servindo a página como application/xhtml+xml, portanto, regras de análise XML são usadas; XML não suporta comentários condicionais. De qualquer forma, não faz sentido; o navegador deve escolher um modo antes de decidir quais comentários condicionais interpretar.
bobince
1

Como um aparte em sites mais modernos, se você estiver usando instruções condicionais em sua tag html de acordo com o padrão, isso por algum motivo fará com que ie9 seja padronizado no modo de compatibilidade. A correção aqui é remover as instruções condicionais da tag html e adicioná-las à tag body, ou seja, fora da seção head. Dessa forma, você ainda pode usar essas classes na sua folha de estilos para direcionar navegadores mais antigos.

uknowit2
fonte
0

Parece bom para mim:

texto alternativo

Tem certeza de que não fez as configurações globalmente ou algo assim? Esta é uma instalação limpa da versão beta no Windows 7. As ferramentas do desenvolvedor relatam que a página está padronizada no Modo Padrão IE9.

Yi Jiang
fonte
Eu tive mais de um relatório desse erro. Embora talvez tenha a ver com o diretório base ( alliancesatwar.com ), que também renderiza todos os subdiretórios no modo de compatibilidade. Mas então eu tenho a pergunta: o que na raiz do site faz o IE renderizar o site no modo de compatibilidade? Então, talvez pelo menos este guia esteja codificado corretamente. Espero que sim então.
René
@ René Strange, eu apenas o reproduzi, clicando no link do Guia na página inicial. Mas isso só aconteceu uma vez, e depois de algumas tentativas eu ainda tenho que reproduzir este, só que apenas uma vez
Yi Jiang
0

Recentemente, tive que resolver esse problema e aqui está o que fiz:

Primeiro de tudo, esta solução está relacionada ao ajuste do servidor Apache.

O segundo pensamento principal é que há um bug no IE9, o que significa que a meta tag não funcionará. Em vez desta solução, tente isso

  • encontre / abra seu httpd.conf
  • descomente / ou adicione a seguinte linha

    LoadModule headers_module modules/mod_headers.so
  • adicione as seguintes linhas

    <IfModule headers_module>
        Header set X-UA-Compatible: IE=EmulateIE8
    </IfModule>
  • salve / reinicie o servidor Apache,

  • navegue até sua página com o IE9, use ferramentas como wireshark ou violinista ou use as ferramentas de desenvolvedor do IE para verificar se o cabeçalho está lá
Abderrazak BOUADMA
fonte