terça-feira, 4 de maio de 2010

Menu do asp.net não funciona no Google Chrome

Este erro, ao contrário do que os outros pensam, não é do Chrome ou do Safari e sim do próprio ASP.NET.

Para gerar o código JavaScript do menu, o ASP.NET verifica qual é o browser do cliente, e se ele suporta ou não JavaScript. Acontece que esta verificação falha em alguns browsers como o Sarafi e consequentemente o Chrome (pois o Chrome foi baseado no Safari), e o  ASP.NET então devolve um código que não funciona.

Para corrigir isto devemos “forçar” o ASP.NET a executar o JavaScript, para isto setamos a propriedade Page.ClientTarget com o valor “uplevel”. Assim informamos que o cliente possui um moderno “uplevel” browser.


Devemos fazer isto para todas as páginas que utilizarão o menu. O código deverá estar dentro do evento Page_Init da página. Ex:


protected void Page_PreInit(object sender, EventArgs e)
{
        if (Page.Request.ServerVariables["http_user_agent"].ToLower().Contains("chrome"))
        {
                       Page.ClientTarget = "uplevel";
        }
}


Neste código, fazemos uma verificação se o user_agent possui a palavra 'chrome', que servirá também pro safari, se sim, forçamos o uplevel.

Para evitar de “copiar” e “colar” o mesmo código em todas as páginas, você poderá aproveitar o que há de melhor da programação orienteda a objetos, a herânça. Para isto crie uma classe herdando de System.Web.UI.Page e coloque este código nela. Para todas as suas páginas, ao invés de herdar diretamente de System.Web.UI.Page, você herda da classe que acabou de criar.

3 comentários:

  1. Muito obrigado pela ajuda, amigo.

    ResponderExcluir
  2. Olá Amigos

    tenho um prblema com o chrome numa pagina asp ... esta soluçao pode ser util?
    antecipo meus agradecimentos pela força

    Mike

    ResponderExcluir