Javascript - 06 - Desenvolvendo Websites Interativos com JavaScript
Capítulo 6 – O browser
JS11-01-1999/01 A4 - © 1999 Helder L. S. da Rocha 6-1
6 O browser
COM O GRANDE NÚMERO DE VERSÕES, PLATAFORMAS E FABRICANTES de browsers, cada um suportando extensões proprietárias e introduzindo recursos incompatíveis, é útil poder indentificar o browser que está carregando uma determinada página. Com esta informação, pode-se tomar a decisão utilizar instruções que só existem naquela versão de browser, ou de redirecionar a janela para outra página. Informações sobre o cliente que acessa uma página são mantidas pela propriedade global navigator.
O objeto Navigator1 representa as propriedades do browser. Usando suas propriedades e métodos booleanos (que retornam true ou false) é possível identificar as possibilidades de um cliente e desenvolver páginas personalizadas com conteúdo específico para aproveitar ao máximo os recursos existentes.
Navigator define as caracteríticas de um único objeto, representado pela propriedade global2 navigator. Todas as suas propriedades são somente-leitura. Todas as cópias de navigator em uma mesma aplicação são idênticas e possuem as mesmas propriedades. As informações que se pode obter através da propriedade navigator são:
• Tipos de dados MIME suportados pelo browser e pela plataforma do cliente, através de plug-ins e programas externos ao browser habilitados a funcionarem como aplicações auxiliares para tipos desconhecidos do browser (Netscape).
1 Assim como Window, não existe na documentação do JavaScript 1.1 um objeto ou construtor chamado 'Navigator'. Usamos este nome apenas para referirmos ao tipo que define os métodos e propriedades do objeto navigator e manter a consistência com os outros objetos. 2 No Internet Explorer, navigator não é global, mas é propriedade de window.
6-2JS11-01-1999/01 A4 - © 1999 Helder L. S. da Rocha
Quatro propriedades contém informações do fabricante do browser, e outras duas, são vetores com objetos do tipo PlugIn e MimeType, usados para identificar plug-ins e tipos suportados. Não estão disponíveis em todos os browsers. As propriedades de Navigator estão listadas na tabela abaixo. Para utilizá-las, é preciso usar o objeto navigator da forma:
Propriedade Descrição userAgentContém String. Informação contida no cabeçalho HTTP User-Agent.
Esta propriedade é a combinação das propriedades appCodeName e appVersion .
Mozilla/4.0 (compatible; MSIE 4.0; Windows 95) Mozilla/4.5 [en] (Win95; I) appCodeNameContém String. Contém o nome interno do browser. Exemplo: Mozilla appVersionContém String. Contém informações sobre a versão.
4.0 (compatible; MSIE 4.0; Windows 95) 4.5 [en] (Win95; I) appNameContém String. Contém o nome oficial do browser.
Microsoft Internet Explorer Netscape mimeTypesContém Array. Um vetor de tipos MIME que descrevem os tipos MIME reconhecidos e suportados pelo browser, internamente, via plug-ins ou através de aplicações auxiliares (do sistema operacional).
pluginsContém Array. Um vetor com todos os plug-ins instalados no cliente.
Com as propriedades userAgent, e appName, obtemos diversas informações sobre o browser. Para utilizá-las é preciso isolar o sub-string com a informação correspondente. Infelizmente os formatos diferem entre os principais fabricantes, mas é possível identificar as três informações mais importantes, onde ocorrem as maiores diferenças: nome e fabricante, versão e plataforma.
O nome e fabricante do produto é fácil de obter. Usa-se a propriedade appName. Sabendose de antemão o nome utilizado pelo fabricante em cada tipo de browser, é possível usá-lo para comparar com o string contido em appName, e verificar se o browser atual é um deles:
// código que só será executado em browsers Internet Explorer }
JS11-01-1999/01 A4 - © 1999 Helder L. S. da Rocha 6-3
Obter a versão do browser é uma tarefa mais complicada. Ela está disponível tanto na propriedade userAgent, como na propriedade appVersion. A versão aqui refere-se ao browser de referência "Mozilla", tanto para Netscape como para o Internet Explorer. O Internet Explorer 3, por exemplo, é compatível com o Netscape Navigator 2.0, portanto a versão que aparece para o Internet Explorer 3 é 2.0 e não 3.03.
Usar appVersion é mais fácil pois a versão está logo no início do string. Tanto nos browsers da Microsoft quando nos browsers da Netscape a primeira coisa após a versão é um espaço. Portanto, basta identificar o espaço, e recuperar o substring que está antes dele. Eis duas formas de fazer isto:
espaco = navigator.appVersion.indexOf(" "); versao = parseFloat(navigator. appVersion .substring(0, espaco)); versao = parseInt( navigator.appVersion.split(" ")[0] );
Se apenas interessa o valor maior da versão, pode-se truncar o que está depois do ponto usando simplesmente:
versao = parseInt(navigator. appVersion );
Depois de extraída a versão, ela pode ser usada para executar trechos de código dependentes de browser:
if (versao < 3.0 && navigator.appName == "Netscape") { // código para browsers Netscape de versões inferiores a 3 }
A posição e o tamanho da informação sobre a plataforma diferem nos browsers Internet Explorer e Netscape Navigator. O ideal, portanto, é identificar primeiro o browser, para depois identificar a plataforma. Strings como "Win", "Mac", "95" e "NT" estão presentes em ambos os browsers. Pode-se então localizar esses strings em appVersion:
// é Windows que tipo?
if (navigator.appVersion.lastIndexOf('Win') != -1) { if (navigator.appVersion.lastIndexOf('NT') != -1) // é Windows NT else if (navigator.appVersion.lastIndexOf('Mac') != -1) {
// é outra plataforma Unix talvez
// é Macintosh } else { }
3 Para obter a versão verdadeira do Internet Explorer, é preciso extrair a informação localizada entre parênteses no meio do string appVersion do Internet Explorer (compatible; MSIE 4.0; Windows 95)
6-4JS11-01-1999/01 A4 - © 1999 Helder L. S. da Rocha
Escreva um programa JavaScript que redirecione a janela do browser de acordo com o tipo de browser que a carregar. Para redirecionar, use a instrução: