E aí leitor! Você também é designer de aplicações em .NET? Então isto aqui pode te interessar…
É diante de um problema que a gente aprende coisas novas. Eu estive esta semana “brigando” com a meta tag:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
no sistema de Extranet da SET.
Pra quem não sabe esta tag serve para fazer o Internet Explorer 8 renderizar uma página como se fosse sua versão 7, isto evita o trabalhão de adaptação ao novo navegador por parte dos desenvolvedores, como já sabemos, existem problemas de estética e Javascript que impedem que a página funcione corretamente dependendo do tipo e do versão de navegador.
O que ocorre é que em aplicações mais robustas e que possuem o arquivo Global.asax, pelo menos no meu caso, aplicar esta tag simplesmente no <header> não adianta. Por alguma razão a qual não era meu foco investigar, o navegador não faz a página ter o mesmo funcionamento do antigo navegador pois esta não é uma solução infalível. Existe também o recurso que o IE8 oferece que é a Solução de Compatibilidade, que tem a mesma função da tal tag mas em alguns casos é possível que esta solução não seja uma solução de fato. A gente tem um CMS da IVIA rodando por lá, o Content, onde há relatos de que fazer com o que o IE8 se comporte como IE7 resultou em alguns problemas.
Aí consultei um ex-colega de trabalho, que jogou no Google, que descobriu um artigo do Vitor Canova, desenvolvedor .NET do Rio Grande do Sul, que é este aqui.
Bom, acontece que esta solução não funcionou porque o .NET é anterior ao que usamos, então, eu como um cara legal que sou
, tive a idéia de aumentar as informações sobre o tema, e otimizar a solução já escrita para ajudar colegas que estão precisando de ajuda por aí. Então fizemos uma readaptação do código para uma solução mais pontual em .NET 2.0. Seguem os passos mastigadinhos pra que você possa tentar aí:
1. Primeiro procure a Master Page do seu projeto, e inclua lá, como primeira meta-tag de toda a página, a tag <meta http-equiv=”X-UA-Compatible” content=”IE=EmulateIE7″ /> (no cabeçalho logicamente);
2. Compile e rode no navegador. Teste a aplicação e dá uma boa olhada se está tudo ok. Se estiver você nem precisa pular para o próximo passo, senão, vamos em frente.
3. Procure o GLOBAL.asax da sua aplicação (se não existir, então certamente você não precisará de nada além da meta-tag X-UA-Compatible que falei ali acima);
4. Abra o arquivo e crie as funções:
/// <summary>
/// Método para preparar a renderização compatível com o IE8 (Emular IE7)
/// </summary>
protected void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
Page p = this.Context.Handler as Page;
if (p != null)
{
p.PreRenderComplete += new EventHandler(p_PreRenderComplete);
}
}
/// <summary>
/// Método que associa o cabeçalho das páginas à compatibilidade IE8
/// </summary>
protected void p_PreRenderComplete(object sender, EventArgs e)
{
Page page = sender as Page;
if (page.Header != null)
{
HtmlMeta meta = null;
foreach (Control var in page.Header.Controls)
{
HtmlMeta metaAux = var as HtmlMeta;
if (metaAux != null && metaAux.HttpEquiv == "X-UA-Compatible")
{
meta = metaAux;
}
}
if (meta != null)
{
page.Header.Controls.Remove(meta);
page.Header.Controls.AddAt(0, meta);
}
}
}
5. Agora você precisa recompilar tudo, rodar novamente a aplicação e boa sorte.
Deu tudo certo? Me conta depois.