O Internet Explorer 11 desabilitar “exibir sites da intranet na visualização de compatibilidade” via metatag não funciona

100

Eu tenho trabalhado em um site de intranet por mais de 6 meses, onde tenho usado o html5 abaixo doctypee a metatag de compatibilidade de borda para forçar o Internet Explorer a não emular uma versão mais antiga do navegador, e isso tem funcionado bem.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>My title</title>
    <meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
</head>
<body>
</body>
</html>

O motivo pelo qual estava fazendo isso dessa maneira é porque o local em que trabalho usa uma configuração de política para habilitar a exibição de compatibilidade para todos os sites da intranet, e essa abordagem usando a EDGEconfiguração funcionou no Internet Explorer 9.

Configuração de exibição de compatibilidade do site da intranet

Há mais de um mês, fui atualizado para o Internet Explorer 11 e o site ainda funcionava conforme o esperado.

Hoje isso parou de funcionar como esperado, não posso dizer com certeza, mas acho que a política que força a visualização de compatibilidade não estava habilitada no IE11 e agora está ... e como isso foi habilitado, a metatag de compatibilidade não é mais fazendo o que é esperado, e este site está sendo executado no modo Enterprise que emula o IE8.

Alguém sabe como consertar isso e forçar o uso do IE11 em um site de intranet quando a compatibilidade "modo Enterprise" está sendo aplicada? e não pode ser desativado por meio das configurações do navegador?

EDITAR

Acabei de tentar adicionar um cabeçalho personalizado em meu web.config, conforme explicado nesta resposta https://stackoverflow.com/a/18257208/98706

e isso não funcionou para mim, ainda recebo a mensagem abaixo no console da barra de ferramentas do desenvolvedor de

HTML1122: Internet Explorer is running in Enterprise Mode emulating IE8.

É como se a versão 8 estivesse sendo tratada como edgequando essa configuração de compatibilidade de intranet fosse habilitada no IE11.

Esta postagem: https://www.leapinggorilla.com/Blog/Read/1016/ie-ate-my-css---disabling-compatability-mode explica isso bem, ainda não tentei definir este cabeçalho via código e nossos usuários não têm acesso para alterar as configurações do navegador .. nenhuma das outras alterações funcionou ainda.

ATUALIZAR

Por favor, veja meu comentário neste post sobre qual é a diferença entre o modo Enterprise e o modo de compatibilidade, porque é importante.

Caro
fonte
O modo empresarial é diferente do modo de exibição de compatibilidade, consulte stackoverflow.com/a/26463309/98706 para saber como desativá-lo, mas, no meu caso, não é tão simples quanto desligá-lo, eu queria substituí-lo para sites específicos da intranet usando uma metatag, mas não funcionou, não tentei novamente porque nossos sites agora estão na lista de permissões.
Caro

Respostas:

93

Certificar-se de que:

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

é a primeira <meta>tag em sua página, caso contrário, o IE pode não respeitá-la.

Como alternativa, o problema pode ser que o IE está usando o modo Empresarial para este site:

  • Sua pergunta mencionou que o console mostra: HTML1122: Internet Explorer is running in Enterprise Mode emulating IE8.
  • Nesse caso, pode ser necessário desativar o modo empresarial (ou assim ) ou desligá-lo para esse site no menu Ferramentas no IE.
  • No entanto, o Modo Empresarial deve, em teoria, ser substituído pela tag X-UA-Compatible, mas o IE pode ter um bug ...
pardal
fonte
Sim, já fiz isso desde então, infelizmente não funcionou :(
Caro
Pode ser que o modo Empresarial esteja
ativado
2
"Modo Empresarial" e "Visualização de Compatibilidade" são diferentes, embora semelhantes. Mesmo se "Exibir sites da intranet no modo de exibição de compatibilidade" estiver marcado, a marca X-UA-Compatible deve substituí-la. No entanto, o modo empresarial pode substituir isso ... você vê o ícone do modo empresarial ( media.askvg.com/articles/images5/… ) quando estiver em seu site?
sparrowt
1
Além disso, o que diz se você pressionar F12 e olhar a guia de emulação? Deve informar por que está usando o modo de documento. Acho que você está acessando o modo Enterprise, não o modo de exibição de compatibilidade.
sparrowt de
19
Isso é tão! @ # $ Irritante, desperdiçando centenas de milhares de horas de desenvolvedores da web em todo o mundo.
Sam Watkins
19

Esse problema geralmente é causado pelo URL do site / intranet sendo colocado em um dos seguintes:

  • Lista de modos de compatibilidade
  • Zona da intranet do Internet Explorer
    (com a configuração Exibir sites da intranet habilitada no modo de exibição de compatibilidade )
  • Lista de modo empresarial

Em redes corporativas, essas configurações de exibição de compatibilidade costumam ser controladas centralmente por meio da política de grupo . No seu caso, o modo Empresarial parece ser o culpado.

Modo Empresarial IE 11

Infelizmente, a configuração de META X-UA-Compatible não substituirá isso.

Para usuários finais

Às vezes, a única maneira de os usuários finais anularem isso é pressionar F12 e alterar o Modo de documento na guia Emulação . No entanto, essa configuração não é permanente e pode ser revertida assim que as Ferramentas do desenvolvedor forem fechadas.

Você também pode tentar excluir o seu site da zona da Intranet. Mas a lista de domínios que pertencem à zona da Intranet geralmente também é controlada pela política de grupo, portanto, a chance de isso funcionar é pequena.

Para ver a lista de domínios que pertencem à zona da Intranet, vá para:

Ferramentas -> Opções da Internet -> Segurança -> Sites -> Avançado

Se a lista contiver seu subdomínio e estiver acinzentada, você não poderá substituir a visualização de compatibilidade até que o administrador da rede permita.

Você realmente precisa entrar em contato com o administrador da rede para permitir a alteração das configurações de exibição de compatibilidade na política de grupo.

Para administradores de rede

Carregar o site com as Ferramentas do desenvolvedor abertas (F12) geralmente relatará o motivo pelo qual o IE está mudando para um modo mais antigo.

Todas as 3 configurações mencionadas acima são geralmente controladas por meio da Política de Grupo, embora às vezes possam ser substituídas nas máquinas dos usuários.

Se o modo Empresarial for o problema (como parece ser o caso do autor da postagem original), os dois artigos a seguir podem ser úteis:

enferrujado
fonte
Expandi sua ótima resposta com mais alguns detalhes que descobri durante uma pesquisa recente. Espero que esteja tudo bem.
Simon East
8

Para aqueles que estão construindo um projeto ASP.NET MVC, certifique-se de adicionar:

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

tag em sua página de Layout (modelo). Acabei de passar duas horas depurando e ajustando, apenas para perceber que só tinha adicionado aquela metatag nas minhas páginas filhas. Assim que o adicionei à minha página de layout, o navegador carregou no modo EDGE perfeitamente.

Jason Marsell
fonte
Meu problema era com um novo modo Enterprise no IE11 que força o navegador a emular o IE8. Não é a mesma coisa que modo de compatibilidade, que é o que esta metatag é usada para substituir. Eu estava usando isso corretamente.
Caro
Meu comentário foi feito para ajudar outras pessoas com os mesmos sintomas, que estão criando sites na ASP.NET MVC. Eu não estava falando com você, especificamente.
Jason Marsell
A metatag funcionará (para problemas de modo de compatibilidade, não problemas de modo Enterprise) para sites não .NET / MVC também, aliás, não é específica para ASP.NET
Dan Harris
4

A resposta marcada é a correta. No entanto, Pricey, você deve acompanhar isso com seus grupos de AD e administradores de desktop. Eles estão usando indevidamente a lista de sites do modo Empresarial do IE11. A Microsoft NÃO pretende que seja usado para todos os sites de intranet dentro de uma organização. Isso seria propagar a configuração existente "renderizar todos os sites da intranet no modo de compatibilidade", que é a ruína do avanço dos sites corporativos em todo o mundo.

Ele deve ser implementado como uma "lista negra", com um punhado de sites que realmente exigem um modo de navegador legado listado na lista do modo Enterprise com seus requisitos de renderização especificados. Todos os outros sites da sua organização são então liberados para usar o Edge. As pessoas em sua organização que o implementaram com todos os sites de intranet incluídos no início compreenderam completamente mal como o Modo Empresarial deve ser implementado.

ch1nmuzak
fonte
Sim, eles definitivamente deveriam estar fazendo isso, mas infelizmente não tenho nada a dizer sobre o assunto, mas foi levantado com eles.
caro
1

A questão é um pouco antiga, mas acabei de resolver um problema muito semelhante. Temos vários sites de intranet aqui, incluindo aquele pelo qual sou responsável, e os outros exigem modo de compatibilidade ou são interrompidos. Por esse motivo, as regras do site padronizam o IE para o modo de compatibilidade em sites de intranet. Estou atualizando minhas próprias coisas e não preciso mais delas; na verdade, alguns dos recursos que estou tentando usar não parecem certos no modo de compatibilidade. Estou usando a meta tag IE-Edge como você.

O IE assume que os sites sem o endereço totalmente qualificado são intranet e age de acordo. Com isso em mente, eu apenas alterei as ligações no IIS para ouvir apenas o endereço totalmente qualificado e, em seguida, configurei um site fictício que ouviu o endereço não qualificado. O segundo redireciona todo o tráfego para o endereço totalmente qualificado, fazendo o IE acreditar que é um site externo. O site é renderizado corretamente com ou sem a caixa Modo de compatibilidade em sites da intranet marcada.

Mike Anderson
fonte
consulte: stackoverflow.com/questions/2518256/… se você tiver acesso web.config.
fontophilic
Eu vi essa pergunta antes, mas acho que confundi a linha do cabeçalho HTTP com a linha META e pensei que já tinha tentado. Funcionou bem depois que eu resolvi isso. Obrigado por me apontar de volta para ele.
Mike Anderson
Eu tentei aplicar a mesma configuração de compatibilidade EDGE na configuração da web e não funcionou para mim, a única maneira que encontrei de fazer isso funcionar é solicitando que nossos sites específicos sejam adicionados a uma lista branca para que sejam ignorados no novo Modo IE11 Enterprise, que parece ser algo diferente do modo de compatibilidade. Esta não é, de forma alguma, uma boa solução para mim devido aos loops que tenho que percorrer para fazer isso todas as vezes.
Caro
Parece que você seguiu o mesmo caminho que eu. Existem 2 coisas que tive de fazer. 1 era a configuração EDGE na META tag da página. Você pode fazer isso no web.config (ou não; não sei), mas eu fiz na página mestra do site. O outro foi adicionar o cabeçalho HTTP personalizado ao web.config.
Mike Anderson,
1

Este é um problema antigo com algumas informações boas. Mas o que acabei de descobrir é que usar um FQDN desativa o modo de compatibilidade no IE 9-11. Exemplo. Tenho o problema de
compatibilidade com http: // lrmstst01: 8080 / JavaWeb / login.do,
mas os problemas desaparecem com
http://lrmstst01.mydomain.int:8080/JavaWeb/login.do
NB: O .int faz parte do nosso domínio interno

Dean P
fonte
Esses links são inválidos. Eles são usados ​​como um exemplo de url com apenas um nome de computador versus um com um FQDN.
Dean P
2
Dica profissional: Example.com existe apenas para essa finalidade
Básico de
Isso ainda é um problema e este comentário não acrescenta nada à solução.
Diana
0

Mova-o para a zona de sites confiáveis ​​adicionando-o a uma lista de sites confiáveis ​​ou configuração local. Isso o moverá para fora da zona da intranet e não será processado no Compat. Visão.

Greg C.
fonte
PS: Eu sei que isso funciona porque é o que estamos fazendo em minha empresa para produtos mais recentes baseados em navegador que não são escritos com tags X-UA para impor a renderização da maneira que eles desejam.
Greg C.
Considerando que essa é provavelmente uma configuração para toda a empresa, sua resposta teria de ser aplicada à máquina de cada usuário, o que dificilmente é ideal.
MattD de
0

Adicione a propriedade abaixo ao arquivo web.config para sites IIS. Isso funcionou para mim na minha intranet no IE11.

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <clear />
      <add name="X-UA-Compatible" value="IE=edge" />
    </customHeaders>
  </httpProtocol>
</system.webServer> 
user942620
fonte
Por favor, veja minha atualização sobre o tíquete, o modo Enterprise e o modo de compatibilidade são 2 coisas diferentes
caro
0

Resolvi esse problema redirecionando o usuário para o FQDN do servidor que hospeda a intranet.

O IE provavelmente usa o pior algoritmo do mundo para detectar sites "intranet" ... de fato, especificar server.domain.tld resolve o problema para mim.

Sim, você leu corretamente, o IE detecta sites de intranet não por endereço IP privado, como qualquer desenvolvedor que já ouviu falar de TCP / IP faria, não, pela parte "host" da URL, se não tiver parte de domínio, deve seja interno.

É assustador saber que os desenvolvedores do IE não entendem os conceitos mais básicos de TCP / IP.

Observe que isso foi em um GRANDE cliente empresarial, fazê-los mudar o GPO para você é como tentar mover os Alpes em 4 metros para o leste, não vai acontecer.

o carpa
fonte
O IE provavelmente faz uma pesquisa de DNS e conhece o IP dele. Como é MS, provavelmente poderia fazer AD, mas DNS faz mais sentido.
smoore4
@SQLDBA negativo, se você especificar o IP, digamos 10.0.0.1, o host NÃO é detectado como site de "intranet" ... nada a ver com DNS, o que quer dizer com AD? Você quer dizer que ele se conecta ao AD e procura o host lá? Não faz sentido, por que faria isso? Então, novamente, eles são a Microsoft por um motivo ™.
carpy de
0

Pelo que vale a pena, eu também tive o problema no IE11:

  • Eu não era no modo Enterprise.
  • A opção "Exibir sites da intranet no modo de exibição de compatibilidade" foi marcada.
  • Eu tinha todos os <!DOCTYPE html>eIE=Edge configurações mencionadas na pergunta
  • O meta cabeçalho era de fato o primeiro elemento no <head>elemento

Depois de um tempo, descobri que:

  • o cabeçalho do agente do usuário enviado ao servidor era IE7, mas ...
  • o valor do JavaScript era IE11!

Cabeçalho HTTP :

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E) mas

JavaScript :

window.navigator.userAgent === 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; rv:11.0) like Gecko'

Então acabei fazendo a verificação do lado do cliente.

E BTW, entretanto, verificar o agente do usuário não é mais recomendado. Consulte https://developer.mozilla.org/en-US/docs/Web/HTTP/Browser_detection_using_the_user_agent (mas pode ser um bom caso)

Yann Vo
fonte