Forçar o modo de compatibilidade do IE desativado usando tags

375

Estou trabalhando para um cliente que força o modo de compatibilidade em todos os sites da intranet. Eu queria saber se existe uma tag que eu possa colocar no meu HTML que force o modo de compatibilidade.

Al Katawazi
fonte
Eu acho que a resposta que você está procurando aqui: stackoverflow.com/questions/1014666/...
Gabriel
45
Na verdade, eu estava procurando exatamente o oposto, que define seu padrão para o modo de compatibilidade, isso é insano.
Al Katawazi
12
Javascript incorreto em um aplicativo herdado que trava em algo que não seja o IE7, é quem define seu padrão de compatibilidade. Um dia, vamos dar a volta a substituí-lo ...
pete o pagão-gerbil
11
@ petethepagan-gerbil você conseguiu substituí-lo? : P
icedwater
11
@icedwater Saí da empresa há mais de 6 anos :) Fizemos pequenas melhorias para remover os problemas sempre que havia uma alteração na mesma área, mas a dívida tecnológica nunca foi priorizada lá. Não sei se isso foi corrigido no final.
pete the pagan-gerbil

Respostas:

535

Existe o modo "borda" .

<html>
   <head>
      <meta http-equiv="X-UA-Compatible" content="IE=edge" />
      <title>My Web Page</title>
   </head>
   <body>
      <p>Content goes here.</p>
   </body>
</html>

Na página vinculada do MSDN:

O modo de borda informa ao Windows Internet Explorer para exibir o conteúdo no modo mais alto disponível, o que realmente quebra o paradigma de "bloqueio". Com o Internet Explorer 8, isso é equivalente ao modo IE8. Se uma versão futura (hipotética) do Internet Explorer suportasse um modo de compatibilidade mais alta, as páginas definidas no modo Edge apareceriam no modo mais alto suportado por essa versão; no entanto, essas mesmas páginas ainda apareceriam no modo IE8 quando exibidas no Internet Explorer 8.

No entanto, o modo "borda" não é incentivado no uso da produção:

É recomendável que os desenvolvedores da Web restrinjam o uso do modo Edge para testar páginas e outros usos que não sejam de produção, devido aos possíveis resultados inesperados da renderização do conteúdo da página em versões futuras do Windows Internet Explorer.

Sinceramente, não entendo completamente o porquê. Mas, de acordo com isso, o melhor caminho a seguir no momento é usar IE=8.

Pekka
fonte
7
A partir de 06/08/2012, a Microsoft parece estar usando IE=10em seus próprios sites. Se você testou seu site no IE10 (versão de pré-visualização), é seguro usá-lo; caso contrário, você pode se manter IE=9por enquanto.
Calvinf
75
Descobri que isso NÃO funciona se o usuário (ou o administrador do sistema) ativou o modo de compatibilidade como padrão, acessando Tools->Compatibility View Settingse marcando Exibir todos os sites no modo de compatibilidade. Para corrigir o problema, eu tenho que voltar o cabeçalho na resposta HTTP:X-UA-Compatible: IE=edge
speedplane
10
+1 ao speedplane - o modo de compatibilidade com o IE10 está ativado por padrão para sites da intranet - UGH ... obrigado pela descoberta!
precisa
132
Conselho para aqueles que encontrarem esta resposta, mas não conseguirem que ela funcione para eles. A meta tag de compatibilidade DEVE ser a primeira meta tag e não pode haver nenhuma declaração condicional do IE antes da tag. Mais: tesmond.blogspot.com/2011/10/…
Chris Sobolewski
2
Obrigado Chris! Eu estava lutando com isso por 30 minutos quando finalmente li seu comentário. Eu não tive primeiro.
Hawkee
91

Após muitas horas solucionando problemas com esse material ... Aqui estão alguns destaques rápidos que nos ajudaram nos X-UA-Compatibledocumentos: http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx#ctl00_contentContainer_ctl16

Usando <meta http-equiv="X-UA-Compatible" content=" _______ " />

  • Os modos Standard User Agent (os não emulados) ignoram as <!DOCTYPE>diretivas da sua página e são renderizados com base nos padrões suportados por essa versão do IE (por exemplo, IE=8obedecerão melhor ao espaçamento das bordas da tabela e a alguns pseudo-seletores IE=7).

  • Visto que, os modos Emular dizem ao IE para seguir quaisquer <!DOCTYPE>diretrizes em sua página, renderizando o modo padrões com base na versão escolhida e o modo peculiaresIE=5

  • Os valores possíveis para o contentatributo são:

    content="IE=5"

    content="IE=7"

    content="IE=EmulateIE7"

    content="IE=8"

    content="IE=EmulateIE8"

    content="IE=9"

    content="IE=EmulateIE9"

    content="IE=edge"

brandonjp
fonte
67

Se você estiver trabalhando com uma página na Zona da Intranet, poderá descobrir que o IE9, não importa o que faça, está entrando no modo Compatibilidade do IE7.

Isso ocorre devido à configuração nas configurações de compatibilidade do IE, que indica que todos os sites da Intranet devem ser executados no modo de compatibilidade. Você pode desmarcar isso por meio de uma política de grupo (ou simplesmente desmarcá-la no IE) ou pode definir o seguinte:

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

Isso funciona (conforme detalhado em outras respostas), mas pode não aparecer inicialmente: ele precisa vir antes que as folhas de estilo sejam declaradas . Caso contrário, será ignorado.

Amadiere
fonte
3
obrigado pelo aviso sobre a folha de estilo, isso estava causando problemas e eu sei o motivo agora!
eMRe 5/02/15
Sim, inicialmente assaltado por posicionamento. Obrigado por adicionar isso.
John Moylan
Obrigado, isso foi muito útil. Eles têm um GPO que está definindo o nível efetivo do IE em 7, mesmo que o IE 11 esteja instalado. Isso me salvou de ter que colocar alguns calços no site para que os js funcionassem.
Charles Owen
28

Eu acredito que isso fará o truque:

<meta http-equiv="X-UA-Compatible" content="IE=edge" />
Peter Ruderman
fonte
28

Conforme sugerido nesta resposta a uma pergunta relacionada, o modo "borda" pode ser definido no arquivo Web.Config. Isso o aplicará a todo o HTML retornado do aplicativo sem a necessidade de inseri-lo em páginas individuais:

<configuration>
    <system.webServer>
        <httpProtocol>
            <customHeaders>
                <add name="X-UA-Compatible" value="IE=edge" />
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>

Essa mesma etapa também pode ser realizada modificando os "Cabeçalhos de resposta HTTP" usando o Gerenciador do IIS para o servidor IIS, site inteiro ou aplicativos específicos.

Erik Anderson
fonte
19

A solução de metatag não estava funcionando para nós, mas a configuração no cabeçalho da resposta funcionou:

header('X-UA-Compatible: IE=edge,chrome=1');
Lance Anderson
fonte
3
+1 para o 'chrome = 1'; Eu nunca soube disso. Pelo que vale a pena, alterá-lo para IE = 10 esclareceu vários problemas de renderização no meu site que o IE = edge não teve nenhum efeito.
Explicação da chrome=1propriedade stackoverflow.com/a/22059516/368691 . Lembre-se de que o Chrome Frame foi retirado. blog.chromium.org/2013/06/retiring-chrome-frame.html
Gajus
11
veja comentários em outras respostas ... Descobri que isso NÃO funciona se o usuário (ou o administrador do sistema) ativou o modo de compatibilidade como padrão, indo em Ferramentas-> Configurações do modo de exibição de compatibilidade e verificando Exibir todos os sites no modo de compatibilidade . speedplane Apr 19 '13 às 11:29 7 A meta tag de compatibilidade DEVE ser a primeira meta tag, e NÃO pode haver nenhuma declaração condicional do IE antes da tag. Mais: tesmond.blogspot.com/2011/10/… - Chris Sobolewski Aug 19 '13 às 20:23
felickz
Tentei colocá-lo na primeira linha da página de layout. Ele não funciona, Stu mencionou a alteração dos cabeçalhos de resposta HTTP do IIS. Eu tentei. Eu reiniciei o pool de aplicativos. Eu inspeciono mais. Esta página está aninhada em outra página. A outra página tem outra meta. Este é o site de produção. Muitas pessoas estão acessando esta página. colocar essa etiqueta no topo é uma missão impossível. Qualquer outra solução ou eu sou parafuso
user12345
10

Apenas mais algumas notas sobre esse tópico com base em minhas experiências recentes. A universidade em que trabalho para emitir laptops com o IE 8 está definida no modo de compatibilidade para todos os sites da intranet. Tentei adicionar a metatag para desativar esse modo nas páginas veiculadas pelo meu site, mas o IE ignorou essa tag de forma consistente. Como Lance mencionou em seu post, adicionar um cabeçalho de resposta corrigiu esse problema. É assim que eu defino o cabeçalho com base no método clichê HTML5:

<IfModule mod_headers.c>
  Header set X-UA-Compatible "IE=edge,chrome=1"
  # mod_headers can't match by content-type, but we don't want to send this header on *everything*...
  <FilesMatch "\.(appcache|crx|css|eot|gif|htc|ico|jpe?g|js|m4a|m4v|manifest|mp4|oex|oga|ogg|ogv|otf|pdf|png|safariextz|svg|svgz|ttf|vcf|webm|webp|woff|xml|xpi)$">
    Header unset X-UA-Compatible
  </FilesMatch>
</IfModule>

Para que este cabeçalho seja realmente enviado, você precisa ter o mod_headers ativado no Apache. Se você quiser ter certeza de que este mod está ativado, coloque-o em uma página que possa executar o php:

<pre>
<?php
    print_r(apache_get_modules());
?>
</pre>
Cloudkiller
fonte
O método .htaccess funcionou para mim no IE8 +. Ele removeu o botão de compatibilidade (também conhecido como inimigo nº 1) e força o IE8 a evitar o uso do modo de compatibilidade. Relacionado: A alternativa de metatag parece funcionar apenas sob certas condições (IE Voodoo) em vários computadores.
William isTed
10

O IE8 padroniza o modo de padrões para o intERnet e o modo de peculiaridades para o intRAnet. A metatag HTML é ignorada se você tiver o doctype definido como xhtml transitional. A solução é adicionar um cabeçalho HTTP no código. Isso funcionou para nós. Agora, o site da intranet está forçando o IE8 a renderizar o aplicativo no modo de padrões.

Adicionado ao PageInit da classe de página base (ASP.net C #):

Response.AddHeader("X-UA-Compatible", "IE=EmulateIE8");

referência: http://ilia.ws/archives/196-IE8-X-UA-Compatible-Rant.html

rswank
fonte
3

Isso ocorre devido à configuração nas configurações de compatibilidade do IE, que indica que todos os sites da Intranet devem ser executados no modo de compatibilidade. Você pode desmarcar isso por meio de uma política de grupo (ou simplesmente desmarcá-la no IE) ou pode definir o seguinte:

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

Aparentemente, não é possível alterar as configurações de exibição de compatibilidade como uma diretiva de grupo, mas é algo que talvez possa ser alterado no registro; essa metatag funciona bem para mim; tive que fazer o atributo necessário funcionar como parte de um formulário html , funcionou no chrome e no firefox, mas não no IE.

Aqui está um belo visual de quais navegadores suportam cada elemento html 5 individual.

http://html5readiness.com/

Observe o denominador comum do Google Chrome, ele suporta tudo. Espero que isso ajude

Crouch
fonte
Parece que o Firefox e o IE 10 agora suportam tudo também. O gráfico não deixa isso tão claro quanto para o Chrome.
Tony L.
0

Insira como o primeiro item sob a tag.

Isso força o IE a renderizar a página na versão física do IE e ignora a "Configuração do modo" do navegador. Isso pode ser definido nas ferramentas do desenvolvedor, tente alterá-lo para uma versão mais antiga do IE para testar, isso deve ser ignorado e a página deve ter a mesma aparência.

technocrusaders.com
fonte
0

Se você tiver acesso ao servidor, a maneira mais confiável de fazer isso é fazê-lo no próprio servidor, no IIS. Acesse Cabeçalhos de resposta HTTP do IIS. Adicionar nome:
Valor compatível com X-UA : IE = edge Isso substituirá seu navegador e seu código.

stu
fonte
Isso redefine na nova implantação para o IIS se definido no nível website
Eman Pitts
0

Se você deseja que cada página da Web individual carregue o conteúdo escolhido e esteja usando asp.net. Basta aplicá-lo como a primeira tag abaixo da tag de cabeçalho em Views> shared> Layout.cshtml

apenas uma dica

rubypeach888
fonte