Por padrão, o IE8 força os sites da intranet a entrar no modo de compatibilidade. Tentei alterar o cabeçalho da meta para IE8, mas ele não reconhece o cabeçalho da meta e apenas usa a configuração do navegador. Alguém sabe como desativar isso?
Por padrão, o IE8 força os sites da intranet a entrar no modo de compatibilidade. Tentei alterar o cabeçalho da meta para IE8, mas ele não reconhece o cabeçalho da meta e apenas usa a configuração do navegador. Alguém sabe como desativar isso?
Respostas:
É possível substituir o modo de compatibilidade na intranet.
Para o IIS, basta adicionar o código abaixo ao web.config. Trabalhou para mim com o IE9.
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=edge" />
</customHeaders>
</httpProtocol>
</system.webServer>
Equivalente para Apache:
Header set X-UA-Compatible: IE=Edge
E para 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ê estiver usando o maravilhoso boilerplate de Paul Irish, terá algo como o seguinte: -
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Isso NÃO funcionará conforme o esperado e forçará o IE a entrar no modo de compatibilidade em um ambiente da Intranet se você tiver marcado "Exibir sites da intranet na exibição de compatibilidade". Você precisa remover os comentários condicionais do IE para impedir o modo de compatibilidade da Intranet.
Portanto, o seguinte código funcionará:
<!doctype html>
<html class="no-js" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Basicamente, se você acionar comentários condicionais do IE antes da <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
instrução, será forçado a entrar no modo de compatibilidade em um ambiente da 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 modelo HTML5 funcionar:
Adicione um comentário vazio e condicional antes do DOCTYPE. E observe também que, ao fazer isso , você também pode adicionar comentários condicionais em torno da X-UA-Compatible
diretiva, tornando a página HTML5 válida também. Então, por exemplo:
<!--[if HTML5]><![endif]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->
Uma postagem de blog inspirada na primeira parte desta resposta tem mais detalhes. E a propósito: Como mencionado nesse post, também se pode substituir o comentário condicional antes do DOCTYPE com um condicional semi comentário com nenhuma condição : <!--[]-->
. Assim, assim:
<!--[]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->
Mas observe que a última variante ( <--[]--><!DOCTYPE html>
), como explicado, por exemplo, por esta resposta a outra pergunta , ativará o problema bem conhecido de que ele - para versões herdadas do IE sem suporte para o X-UA-Compatioble
(leia-se: para IE7 e IE6) - coloca o navegador em modo peculiar.
Se você abrir o menu "Ferramentas" e escolher "Configurações de exibição de compatibilidade" Na caixa de diálogo na parte inferior, há uma configuração "Exibir sites da intranet no modo de compatibilidade". Se você desmarcar isso, deve resolver o problema e o IE usará o modo com base no DOCTYPE.
Há uma certa confusão nas respostas a esta pergunta.
A resposta principal é atualmente uma solução do lado do servidor que define um sinalizador no cabeçalho http e alguns comentários indicam que uma solução usando uma metatag simplesmente não funciona.
Acho que esta entrada de blog fornece uma boa visão geral de como usar as meta informações de compatibilidade e, em minha experiência, funciona conforme descrito: http://blogs.msdn.com/b/cjacks/archive/2012/02/29/using-x- ua-compatible-to-create-durable-enterprise-web-applications.aspx
Os pontos principais:
Um ponto importante (e acho que muita confusão vem desse ponto) é que o IE tem duas "classes" de modos:
O modo de documento determina o mecanismo de renderização (como a página da web é renderizada).
O Modo Navegador determina qual sequência de caracteres do User-Agent (UA) que o IE envia aos servidores, para qual padrão o Document IE e como o IE avalia os Comentários Condicionais.
Mais informações sobre o modo de documento x 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 . Portanto, se você está confiando na detecção do navegador, isso não ajuda. Mas se você estiver usando a detecção de recursos, esse deve ser o caminho a seguir.
Então, eu recomendaria o uso da metatag (na página html) usando esta sintaxe:
<meta http-equiv="X-UA-Compatible" content="IE=9,10" ></meta>
Aviso: forneça uma lista dos modos de navegador que você testou.
A postagem do blog também aconselha contra o uso do EmulateIEX. Aqui está uma citação:
Dito isto, uma coisa que acho estranha é quando um aplicativo solicita o EmulateIE7 ou o EmulateIE8. Esses modos de emulação são eles próprios decisões. Portanto, em vez de ser específico sobre o que você deseja, você está pedindo uma de duas coisas e, em seguida, determinando quais dessas duas coisas procurando em outro lugar no código por um DOCTYPE (e depois tentando entender se esse DOCTYPE fornecerá 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ê deseja, em vez de dar uma resposta que é em si uma pergunta. Se você deseja os padrões do IE7, use IE = 7, em vez de IE = EmulateIE7. (Observe que isso não significa que você não deve usar um DOCTYPE - você deve.)
Tente este metatag:
<meta http-equiv="X-UA-Compatible" content="IE=8" />
Ele deve forçar o IE8 a renderizar como modo padrão do IE8, mesmo que a opção "Exibir sites da intranet no modo de compatibilidade" esteja marcada [na intranet ou em todos os sites], tentei por conta própria no IE 8.0.6
O administrador do sistema resolveu esse problema desmarcando a caixa globalmente para nossa organização. Os usuários nem precisavam fazer logoff.
Encontrei uma resposta funcional que permite substituir o Modo de Exibição de Compatibilidade da Intranet verificado. Basta adicionar no evento OnInit da sua página esta linha (nenhuma meta ou web.config customHeader precisa):
Response.AddHeader("X-UA-Compatible", "IE=EmulateIE8");
Tente colocar o seguinte no cabeçalho:
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Cortesia de Paul Irish em HTML5 Boilerplate (mas também funciona em XHTML Transitional).
Consegui substituir o modo de compatibilidade especificando a metatag como A PRIMEIRA ETIQUETA seção na cabeça, não apenas a primeira metatag, mas como e somente a MUITO PRIMEIRA ETIQUETA .
Agradeço ao @ stefan.s por me colocar na sua excelente resposta. Antes de ler, eu tinha:
ISTO NÃO FUNCIONOU
<head>
<link rel="stylesheet" type="text/css" href="https://stackoverflow.com/qmuat/plugins/editors/jckeditor/typography/typography.php"/>
<meta http-equiv="x-ua-compatible" content="IE=9" >
moveu a tag link para fora do caminho e funcionou
ISSO FUNCIONA :
<head><meta http-equiv="x-ua-compatible" content="IE=9" >
Portanto, um cliente do IE8 configurado para usar a compatibilidade renderiza a página no modo Padrão do IE8 - o conteúdo = 'IE = 9' significa usar o padrão mais alto disponível até o IE9, inclusive.
Esta não é exatamente uma solução, mas acho que é a melhor. Nos sites da intranet, dizemos às pessoas que ele só pode ser acessado pelo Firefox; não aceitamos os usuários do IE por aqui. Verifique o agente do usuário no lado do servidor ou cliente e negue-lhes acesso a partir 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 injetam javascripts e folhas de estilo no início do <head>
e isso parece impedir a solução bem estabelecida de meta tag de funcionar corretamente. Nesse caso, descobri que a injeção direta no cabeçalho de resposta HTTP, bem como a resposta de Andras Csehi, resolverá o problema.
No entanto, para aqueles que usam Java Servlets, 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 cabeçalho de resposta Ele aborda como podemos resolver esse problema através de um RequestInterceptor (Spring).
Se você deseja que seu site force o modo de padrões do IE 8, use esse metatag junto com um DOCTYPE válido:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />
Observe o valor "EmulateIE8" em vez do simples "IE8".
De acordo com os desenvolvedores do IE, isso deve: "Exibir DOCTYPEs de padrões no modo de padrões do IE8; Exibir quirks DOCTYPEs no modo de quirks. Use essa tag para substituir a exibição de compatibilidade em máquinas clientes e forçar os padrões aos 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 pergunta é uma duplicata do modo de navegador Force "Internet Explorer 8" na intranet .
As respostas indicam que não é possível desativar a exibição de compatibilidade (no lado do servidor) - https://stackoverflow.com/a/4130343/24267 . Certamente parece ser esse o caso, pois nenhuma das sugestões que tentei funcionou. No IE8, o "Modo navegador" é definido para a visualização de compatibilidade com o Internet Explorer 8, independentemente do tipo de cabeçalho compatível com X-UA que você envia.
Eu tive que fazer um tratamento especial para o IE7 e o modo de compatibilidade, que causou a renderização do navegador usando o IE8, mas relatou que era o IE7, quebrei meu código. Foi assim que corrigi meu código (sei que é um hack horrível e devo testar recursos que não sejam 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, esse é o IE8 no modo de compatibilidade. isIE8 = verdadeiro; }
Adicione isso dentro da tag principal da sua página (segmentando a versão do IE desejada):
<meta http-equiv="X-UA-Compatible" content="IE=8" />
Observe que isso NÃO mudará o fato de o navegador informar que está no modo de compatibilidade (chamado de modo do navegador), mas a página será renderizada no modo de padrões do IE8. Se ainda não renderizar 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 de qual propriedade você deve estar desativando, porque, mesmo se você definir a tag meta X-UA-Compatible, a sequência do agente do usuário continuará dizendo MSIE 7.0 .
No meu caso, para a correção, tive que adicionar uma verificação ao modo de compatibilidade do IE7. 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 estiver lendo isso que deseja desabilitar isso via GPO para todos os usuários, esta é a configuração:
Configuração do computador / Modelos administrativos / Componentes do Windows / Internet Explorer / Exibição de compatibilidade / Ativar o modo de padrões do Internet Explorer para intranet local
embora a edição web.config tenha corrigido para mim.
Alterar os cabeçalhos em .htaccess
BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
Encontre a solução para este problema aqui: https://github.com/h5bp/html5-boilerplate/issues/378
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 X-UA-Content na página, mas estava testando a versão do navegador no lado do cliente navigator.appVersion
. Este teste não reflete os metadados porque está dando ao modo navegador e não ao modo documento.
A resposta para mim foi testar 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 meta X-UA-Content reflete no meu teste do navegador.
Por que faço uma coisa tão desaprovada como testar o navegador? Rapidez. Vários dos meus suplementos jQuery, como o tablesorter, são muito lentos no IE6 / 7 e quero desativá-los. Não tenho certeza de que o teste de recursos do navegador possa me ajudar a resolver isso de outra forma.