Desenvolvimento - ASP. NET
Obtendo a resolução de Tela do usuário em ASP.NET
Quem nunca sofreu problemas com a resolução de tela de alguns usuários? Fazemos as nossas aplicações na resolução que achamos mais conveniente, normalmente maior ou igual a 1024 x 768. E adivinhe quem adora utilizar 640 x 480? O diretor da empresa...
por Avelino Ferreira Gomes FilhoJá pensou como seria muito bom saber como os seus usuários acessam a sua aplicação. Pelo menos para que você possa compatibilizá-la com o gosto da maioria deles. Mas, ai vem um pequeno problema: Como salvar dados que só são obtidos via Javascript,que roda no cliente, em arquivos de dados do servidor, acessados via ASP.Net? Ou seja, como fazer com que o seu código ASP.Net em VB ou C#, que roda no lado do servidor, veja qual é a resolução de tela de um usuário? Em uma primeira idéia, o desenvolvedor poderá tentar utilizar o System.Web.UI.Page.Request.Browser. Mas infelizmente ele não possui nenhuma propriedade para obtermos a resolução de tela.
A resposta é uma pequena combinação de Javascript + ASP.Net. Vamos a ela.
Primeiramente vamos criar um Web User Control e chamaremos o de Contador.ascx.
Na página que abre em decorrência desta ação, mude a visualização de Design para HTML e escreva o seguinte código Javascript.
<script language="JavaScript" type="text/javascript"> var alturaTela; var larguraTela; if (screen) { alturaTela = screen.height; larguraTela = screen.width; } else { alturaTela = escape("Não identificado") larguraTela = escape("Não identificado") } document.writeln("<img width=0 height=0 style=\"position:absolute;\" border=0 src=\"Resolucao.aspx?alturaTela=" + alturaTela + "&larguraTela=" + larguraTela +"\">") /* Você não está vendo coisas, realmente existe uma página ASPX sendo colada como se fosse uma figura em um código JS. */ </script>
Depois, vamos criar a nossa página que irá contabilizar a resolução de telas dos nossos usuários. A Resolucao.aspx que foi colada como imagem.
Na Resolucao.apsx poderemos colocar o seguinte código do lado do servidor.
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim Fs As System.IO.StreamWriter Dim altura As String Dim largura As String If Not Page.IsPostBack() Then Fs = New System.IO.StreamWriter("c:\temp\contador.txt", True) altura = Request.QueryString("alturaTela") largura = Request.QueryString("larguraTela") Fs.WriteLine(altura & "[]" & largura) Fs.Close() End If End Sub
Pode não ser bonito, mas vai servir por enquanto.
Finalmente, vamos colar em uma página o nosso Web User Control, Contador.ascx. Que tal a Default.aspx?
Rode a aplicação. A saída irá depender da sua resolução de tela no momento.
Ex:
768[]1024
600[]800
Com isso você poderá contabilizar qual a resolução utilizada pelos seus usuários e ficará sabendo como esses acessam a sua página. Agora você poderá trabalhar a sua interface de modo que esta agrade a gregos e troianos.
Aproveite para melhorar o código. Por exemplo ao invés de salvar só a resolução de tela do usuário, por que não salvar o navegador que ele utiliza, a versão, se ele aceita Javascript, VBScript entre outros. Dê uma boa olhada no MSDN com carinho particular no HttpRequest.Browser.
Uma outra dica é ao salvar o arquivo. Ao invés do arcaico txt, por que não um XML. Caso seja muito crítico o problema, você poderá salvar até em banco de dados.
Uma última dica de melhoria poderia ser quanto a quantidade de vezes que você irá contabilizar a resolução de um usuário específico. Por exemplo, se lhe interessar o acesso por seção, você poderia mudar o código da Resolucao.aspx.
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim Fs As System.IO.StreamWriter Dim altura As String Dim largura As String If Not Page.IsPostBack() And IsNothing(Session.Item("JaContabilizou")) Then Fs = New System.IO.StreamWriter("c:\temp\contador.txt", True) altura = Request.QueryString("alturaTela") largura = Request.QueryString("larguraTela") Fs.WriteLine(altura & "[]" & largura) Fs.Close() Session.Add("JaContabilizou", True) End If End Sub
Trabalhe também a forma como você irá extrair esses dados, pode ser com o Crytal Reports, ou Tee Chart, por exemplo.