sexta-feira, 8 de maio de 2009

Mais sobre meta tag IE8: App_Themes

Após o meu post anterior sobre a tag X-UA-Compatible do IE8 comecei a verificar que em algumas páginas o comportamento era igual ao de uma página que não teria a tag. Vendo um pouco mais além, verifiquei que em algumas páginas o ASP.NET colocou duas tags antes da tag tag X-UA-Compatible. Elas são justamente as tags dos arquivos do App_Themes que são colocados antes do PreRenderComplete. Para contornar este problema é necessário que a tag tag X-UA-Compatible seja removida de onde está e colocado como primeira tag dentro do Head. Primeiro temos que criar em cada página o evento PreRenderComplete. Pra evitar de fazermos em cada uma das páginas manualmente podemos adicionar este evento a página no arquivo Global.asax conforme abaixo:

protected void Application_PreRequestHandlerExecute(object sender, EventArgs e)

{

 Page p = this.Context.Handler as Page;

 if (p != null)

 {

  p.PreRenderComplete += new EventHandler(p_PreRenderComplete);

 }

}

Após isto criamos este novo evento que buscará o header da página, tentará encontrar o tag que precisamos, removerá de onde estiver e colocará como primeiro elemento. Segue o código abaixo:

protected void p_PreRenderComplete(object sender, EventArgs e)

{

 Page page = sender as Page;

 if (page.Header != null)

 {

  var ctrl = page.Header.Controls.Cast<Control>().FirstOrDefault(

   c => c is HtmlMeta && ((HtmlMeta)c).HttpEquiv == "X-UA-Compatible");

 

  if (ctrl != null)

  {

   page.Header.Controls.Remove(ctrl);

   page.Header.Controls.AddAt(0, ctrl);

  }

 }  

}

Senão ficou bem formatado é porque usei a funcionalidade de postagem por e-mail do Blogger, que pode não ser 100% igual ao post normal. Enjoy

Nenhum comentário: