Substituir o modo de compatibilidade da intranet IE8

Por padrão, o IE8 força os sites de intranet a entrar no modo de compatibilidade. Eu tentei mudar o header meta para o IE8, mas ele não reconhece o header meta e apenas usa a configuração do navegador. Alguém sabe como desabilitar isso?

    É possível replace o modo de compatibilidade na intranet.

    Para o IIS, basta adicionar o código abaixo ao web.config. Trabalhei para mim com o IE9.

            

    Equivalente para o Apache:

     Header set X-UA-Compatible: IE=Edge 

    E para o nginx:

     add_header "X-UA-Compatible" "IE=Edge"; 

    E para express.js:

     res.set('X-UA-Compatible', 'IE=Edge') 

    Michael Irigoyen está correto, mas é um pouco mais complicado …

    Se você está usando o maravilhoso clichê de Paul Irish, então você terá algo como o seguinte:

              

    Isso NÃO funcionará como esperado e forçará o IE a entrar no modo de compatibilidade em um ambiente de Intranet se você marcar a opção “Exibir sites de intranet em modo de compatibilidade”. Você precisa remover os comentários condicionais do IE para impedir o modo de compatibilidade da Intranet.

    Então o seguinte código irá funcionar:

         

    Basicamente, se você acionar comentários condicionais do IE antes da declaração , você será forçado a entrar no modo de compatibilidade em um ambiente de Intranet se estiver executando o IE9 com as configurações padrão.

    ATUALIZAÇÃO – INFORMAÇÕES ADICIONAIS: Mas observe que há um truque que fará o boilplate HTML5 funcionar:

    Adicione um comentário condicional vazio antes do DOCTYPE. E observe também que, quando você faz isso , também é possível adicionar comentários condicionais em torno da diretiva X-UA-Compatible , tornando a página HTML5 válida também. Então, por exemplo:

          

    Um post que foi inspirado na primeira parte desta resposta , tem mais detalhes. E a propósito: Como mencionado no post do blog, também é possível replace o comentário condicional antes do DOCTYPE por um comentário semi-condicional sem nenhuma condição : . Assim, assim:

          

    Mas note que a última variante ( <--[]--> ), como explicado, por exemplo, por esta resposta a outra questão , ativa o problema bem conhecido – para versões herdadas do IE sem suporte para o X-UA-Compatioble (leia-se: para IE7 e IE6) – traga o navegador para o modo quirks.

    Se você puxar para baixo o menu “Ferramentas” e escolher “Configurações de exibição de compatibilidade” Na checkbox de diálogo na parte inferior é uma configuração “Exibir sites da intranet no modo de compatibilidade”. Se você desmarcar isso, isso deve resolver o problema e o IE usará o modo baseado no DOCTYPE.

    Há uma certa quantidade de confusão nas respostas a esta questão.

    A resposta principal é atualmente uma solução do lado do servidor que define um sinalizador no header http e alguns comentários indicam que uma solução usando uma meta tag simplesmente não funciona.

    Eu acho que esta input do blog dá uma boa visão geral de como usar meta informações de compatibilidade e na minha experiência funciona como descrito: http://blogs.msdn.com/b/cjacks/archive/2012/02/29/using-x- ua-compatível-para-criar-durável-empresa-web-applications.aspx

    Os pontos principais:

    • definindo as informações usando uma meta tag e no header ambos os trabalhos
    • A meta tag tem precedência sobre o header
    • A meta tag tem que ser a primeira tag, para garantir que o navegador não determine o mecanismo de renderização antes com base na heurística

    Um ponto importante (e acho que muita confusão vem desse ponto) é que o IE tem duas “classs” de modos:

    1. O modo de documento
    2. O modo de navegador

    O modo de documento determina o mecanismo de renderização (como é a página da web renderizada).

    O Modo do Navegador determina qual string do User-Agent (UA) IE envia para os servidores, o que o Modo de Documento do IE é padronizado e como o IE avalia os Comentários Condicionais.

    Mais informações sobre o modo de documento versus o modo de navegador podem ser encontradas neste artigo: http://blogs.msdn.com/b/ie/archive/2010/06/16/ie-s-compatibility-features-for- site-developers.aspx? Redirecionado = true

    Na minha experiência, os metadados de compatibilidade influenciarão apenas o modo de documento . Então, se você está confiando na detecção do navegador, isso não irá ajudá-lo. Mas se você estiver usando a detecção de resources, este deve ser o caminho a percorrer.

    Então eu recomendo usar a meta tag (na página html) usando esta syntax:

      

    Aviso: forneça uma lista de modos de navegador para os quais você testou.

    A postagem do blog também adverte contra o uso do EmulateIEX. Aqui uma citação:

    Dito isto, uma coisa que eu acho estranho é quando um aplicativo solicita EmulateIE7 ou EmulateIE8. Esses modos de emulação são decisões deles mesmos. Então, ao invés de ser específico sobre o que você quer, você está pedindo uma de duas coisas e então determinando qual dessas duas coisas procurando em outro lugar no código por um DOCTYPE (e então tentando entender se aquele DOCTYPE lhe dará padrões ou peculiaridades dependendo do seu conteúdo – outra tarefa às vezes confusa). Em vez de fazer isso, acho que faz muito mais sentido especificar diretamente o que você quer, em vez de dar uma resposta que é em si uma questão. Se você quiser os padrões do IE7, use IE = 7, em vez de IE = EmulateIE7. (Note que isso não significa que você não deveria usar um DOCTYPE – você deveria.)

    Experimente esta metatag:

      

    Ele deve forçar o IE8 a ser renderizado como o modo padrão do IE8, mesmo que “Exibir sites de intranet em modo de compatibilidade” esteja marcado [na intranet ou em todos os sites], tentei por mim mesmo no IE 8.0.6

    Nosso administrador do sistema resolveu esse problema desmarcando a checkbox globalmente para nossa organização. Os usuários nem precisaram fazer logoff.

    insira a descrição da imagem aqui

    Eu encontrei uma resposta de trabalho que permite replace a exibição de compatibilidade da intranet marcada. Basta adicionar o evento OnInit da sua página nesta linha (não precisa de meta ou web.config customHeader):

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

    Tente colocar o seguinte no header:

      

    Cortesia HTML5 Boilerplate de Paul Irish (mas também funciona no XHTML Transitional).

    Consegui replace o modo de compatibilidade especificando a metatag como THE FIRST TAG na seção head, não apenas a primeira metatag, mas como e somente como o PRIMEIRO TAG .

    Obrigado ao @ stefan.s por me colocar em sua excelente resposta. Antes de ler que eu tinha:

    Isso não funcionou

        

    moveu a tag de binding para fora do caminho e funcionou

    Isso funciona :

      

    Portanto, um cliente do IE8 configurado para usar a compatibilidade renderiza a página como o modo padrão do IE8 – o conteúdo = ‘IE = 9’ significa usar o mais alto padrão disponível até e incluindo o IE9.

    Isso não é exatamente uma solução, mas sinto que é a melhor. Em nossos sites de intranet, informamos às pessoas que elas só podem ser acessadas pelo Firefox. Não aceitamos os usuários do IE por aqui. Verifique o agente do usuário no servidor ou no lado do cliente e negue o access do IE. E eu sou um programador .NET.

    Eu tinha lutado com esse problema e queria ajudar a fornecer uma solução e uma visão únicas.

    Certas estruturas baseadas em AJAX irão injetar javascripts e folhas de estilo no início do e fazer isso parece impedir que a solução de meta tag bem estabelecida funcione corretamente. Neste caso, descobri que injetar diretamente no header de resposta HTTP, assim como a resposta de Andras Csehi, resolverá o problema.

    Para aqueles de nós usando Java Servlets, no entanto, uma boa maneira de resolver isso é usar um ServletFilter.

     public class EmulateFilter implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { HttpServletResponse response = ((HttpServletResponse)arg1); response.addHeader("X-UA-Compatible", "IE=8"); arg2.doFilter(arg0, arg1); } @Override public void init(FilterConfig arg0) throws ServletException { } } 

    Podemos resolver esse problema no ambiente Spring-Apache-tomcat adicionando uma única linha no método RequestInterceptor –

     //before the actual handler will be executed public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // Some logic // below statement ensures IE trusts the page formatting and will render it acc. to IE 8 standard. response.addHeader("X-UA-Compatible", "IE=8"); return true; } 

    Referência de – Como criar filtro e modificar header de resposta Aborda como podemos resolver esse problema por meio de um RequestInterceptor (Spring).

    Se você quiser que o seu site force o modo de padrões do IE 8, use esta metatag juntamente com um DOCTYPE válido:

    Observe o valor “EmulateIE8” em vez do simples “IE8”.

    De acordo com os devs do IE, isso deveria, “Display Standards DOCTYPEs no modo Standards do IE8; Display Quirks DOCTYPEs no modo Quirks. Use essa tag para replace a visualização de compatibilidade em máquinas clientes e forçar Padrões para os Padrões do IE8.”

    mais informações sobre esta postagem no blog do IE: http://blogs.msdn.com/b/ie/archive/2008/08/27/introducing-compatibility-view.aspx

    Esta questão é uma duplicata do modo de navegador Force “Internet Explorer 8” na intranet .

    As respostas indicam que não é possível desativar a visualização de compatibilidade (no lado do servidor) – https://stackoverflow.com/a/4130343/24267 . Esse certamente parece ser o caso, já que nenhuma das sugestões que tentei funcionou. No IE8, o “Modo Navegador” é definido para a exibição Compatibilidade do Internet Explorer 8, independentemente do tipo de header compatível com X-UA que você envia.

    Eu tive que fazer algum tratamento especial para o IE7 e modo de compatibilidade, o que causou o navegador para renderizar usando o IE8, mas o relatório foi IE7, quebrou meu código. Foi assim que consertei meu código (estou ciente de que este é um hack horrível e eu deveria estar testando os resources que não são versões do navegador):

     isIE8 = navigator.appVersion.indexOf ("MSIE")! = -1 && parseFloat (navigator.appVersion.split ("MSIE") [1]) == 8;
     if (! isIE8 && navigator.appVersion.indexOf ("MSIE")! = -1 && parseFloat (navigator.appVersion.split ("MSIE") [1]) == 7 && navigator.appVersion.indexOf ("Trident") ! = -1) {
         // Mentiroso, este é o IE8 no modo de compatibilidade.
         isIE8 = true;
     }
    

    Tive o mesmo problema. Funcionou usando

      

    Adicione isso na tag head da sua página (segmentando a versão do IE desejada):

      

    Observe que isso NÃO mudará o fato de que o navegador diz que está no modo de compatibilidade (chamado de modo de navegador), mas a página será renderizada no modo de padrões do IE8. Se a sua ainda não renderização como você deseja, é provavelmente porque você tem o javascript que está erroneamente verificando a versão do IE. Consulte a postagem do blog a seguir para determinar qual propriedade deve ser desativada porque, mesmo se você definir a tag meta-X-UA-Compatible, a string do agente do usuário ainda dirá o MSIE 7.0 .

    No meu caso, para a correção eu tive que adicionar uma verificação para o modo de compatibilidade do IE7. Eu fiz isso usando um código javascript simples:

      //IE8 and later will have the word 'trident' in its user agent string. if (navigator.userAgent.indexOf("Trident")>-1) { //do something } 

    Para qualquer outra pessoa que esteja lendo este documento para desabilitar isso via GPO para todos os usuários, esta é a configuração:

    Configuração do Computador / Modelos Administrativos / Componentes do Windows / Internet Explorer / Modo de Exibição de Compatibilidade / Ativar o Modo de Padrões do Internet Explorer para Intranet Local

    embora a edição web.config tenha corrigido isso para mim.

    O comentário de Stefan S sobre o modo de documento versus o modo de navegador foi muito pertinente para o meu problema.

    Eu tenho os metadados do X-UA-Content na página, mas eu estava testando no lado do cliente a versão do navigator.appVersion via navigator.appVersion . Esse teste não reflete os metadados porque está dando ao modo de navegador não o modo de documento.

    A resposta para mim foi testar o document.documentMode algo como:

     function IsIE(n) { if (navigator.appVersion.indexOf("MSIE ") == -1) return false; var sDocMode = document.documentMode; return (isFinite(sDocMode) && sDocMode==n); } 

    Agora, minha meta tag X-UA-Content reflete no meu teste de navegador.

    Por que eu faço uma coisa tão feia como testar o navegador? Rapidez. Vários dos meus add-ins do jQuery, como o tablesorter, são muito lentos no IE6 / 7, e eu quero desativá-los. Não tenho certeza se o teste de resources do navegador pode me ajudar a resolver isso de outra forma.

    Mude os headers no .htaccess

     BrowserMatch MSIE ie Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie 

    Encontrei a solução para este problema aqui: https://github.com/h5bp/html5-boilerplate/issues/378