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.


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.


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 !!


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.


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. ;-)


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.


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.


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.


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á
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.