Professional Documents
Culture Documents
JavaScript
Shelley Powers
Novatec
CAPTULO 1
Ol, JavaScript!
Um motivo pelo qual JavaScript to popular ser relativamente fcil de ser acrescentado a uma pgina web. Tudo que voc precisa fazer incluir pelo menos um elemento HTML script na pgina, especificar "text/javascript" para o atributo type e adicionar qualquer JavaScript que quiser:
<script type="text/javascript"> ... algum cdigo-fonte JavaScript </script>
No necessria instalao e voc tambm no precisa ter que lidar com configuraes estranhas de caminhos (paths) de alguma biblioteca. JavaScript funciona imediatamente e na maioria dos navegadores web, incluindo os quatro mais importantes: Firefox, Internet Explorer, Opera e Safari. Tudo o que voc tem que fazer adicionar um bloco de scripting e j est em ao. Tradicionalmente, voc adiciona blocos escritos em JavaScript ao elemento head (cabealho) do documento (delimitado por tags head de abertura e fechamento do cabealho), mas voc tambm pode inclu-los no elemento body ou at em ambas as sees. Todavia, adicionar um script ao corpo geralmente no considerada uma boa tcnica, j que dificulta encontrar esse script quando voc for modific-lo no futuro. A exceo a essa regra quando o desempenho for uma preocupao, o que ser visto no captulo 6. Todos os exemplos neste livro adicionam blocos de scripting apenas seo head (cabealho) da pgina web.
Hello World!
Tambm comum que o primeiro exemplo ao se aprender uma nova linguagem de programao seja conhecido como Hello World uma aplicao muito simples que imprima essa mensagem na interface do usurio, seja qual esta for. No caso de JavaScript, a interface do usurio a pgina web. O exemplo 1.1 mostra uma pgina web com um bloco em JavaScript que, usando apenas uma linha escrita nessa linguagem, abre uma pequena janela normalmente chamada de caixa de alerta com as palavras Hello World!
19
20
Aprendendo JavaScript
Copiar o exemplo 1.1 para um arquivo e abri-lo em navegadores web que suportem JavaScript deve resultar em uma caixa de alerta onde se l Hello World! . Caso isso no acontea, voc deve se assegurar de que JavaScript esteja habilitado.
Verses mais antigas do Internet Explorer tambm desabilitam scripts se voc abrir a pgina pelo menu File Open em vez de usar um endereo de pgina web como http://<algum_domnio.com>/index.html.
Essa aplicao, embora muito limitada em funcionalidade, demonstra um pouco os componentes mnimos de uma aplicao JavaScript: voc tem uma pgina web, um elemento script e uma linha em JavaScript. Experimente voc mesmo, exceto editar a string substituindo a palavra World por seu nome. claro que, se voc quiser fazer mais do que simplesmente imprimir uma mensagem no navegador, precisar estender de alguma forma esse exemplo.
21
Embora o exemplo 1.2 seja uma aplicao muito pequena, expe diversos componentes bsicos da maioria das aplicaes em JavaScript em uso atualmente, cada um dos quais merecendo um exame mais detalhado. No resto deste captulo, faremos esse exame mais de perto, um componente de cada vez.
Ainda no coberto neste captulo a Document Type Declaration (DOC-TYPE) usada nos exemplos 1.1 e 1.2, que pode influenciar como diferentes navegadores processam JavaScript. Abordarei o impacto de um DOCTYPE no captulo 6.
A tag script
JavaScript frequentemente usado dentro do contexto de outra linguagem, como as linguagens de marcao HTML e XHTML. Entretanto, voc no pode simplesmente colocar JavaScript na marcao onde e como quiser. No exemplo 1.2, o elemento script contm o cdigo JavaScript. Isso informa o navegador o que, quando encontrar a tag de abertura do elemento de script, no deve processar seu contedo como HTML ou XHTML. Nesse momento, o controle sobre o contedo passado para o mecanismo de scripting do navegador. Nem todos os scripts existentes dentro de pginas web so JavaScript, e a tag de abertura do elemento script contm um atributo definindo o tipo do script. Nesse exemplo, este apresentado como text/javascript. Entre outros valores permitidos para o atributo type esto:
22
Aprendendo JavaScript
text/ecmascript text/jscript text/vbscript text/vbs O primeiro valor type listado especifica que o script interpretado como ECMAScript, baseado no padro de scripting ECMA-262. O valor a seguir faz com que o script seja interpretado como JScript, uma variao de ECMAScript que a Microsoft implementa no Internet Explorer. Os dois ltimos valores so para o VBScript da Microsoft, uma linguagem de scripting completamente diferente. Todos esses valores de type descrevem o tipo MIME do contedo. MIME, ou Multipurpose Internet Mail Extension, uma forma de identificar como o contedo est codificado (p. ex., text) e seu formato especfico (javascript). Fornecendo um tipo MIME, os navegadores capazes de processar o tipo o fazem, enquanto outros navegadores pulam a seo. Isso garante que apenas aplicaes que possam processar o script realmente o acessem. Verses anteriores da tag script recebiam um atributo language, que era usado para designar a verso da linguagem, assim como o tipo: javascript1.2 em comparao a javascript 1.1. Entretanto, o uso de language ficou obsoleto em HTML 4.01, embora ainda aparea em muitos exemplos de JavaScript. A est uma das primeiras tcnicas multinavegadores.
Uso o termo multinavegadores para denotar JavaScript que funciona em todos os navegadores-alvo, ou que usa funcionalidades para gerenciar quaisquer diferenas de modo que a aplicao funcione em mltiplos navegadores .
Anos atrs, ao trabalhar com problemas relacionados a compatibilidade de mltiplos navegadores, no era incomum que se criasse um script especfico para cada navegador em uma seo ou arquivo separado e depois se usasse o atributo language para assegurar que apenas um navegador compatvel pudesse acessar o cdigo. Examinando alguns de meus exemplos antigos (por volta de 1997), encontrei o seguinte:
<script src="ns4_obj.js" language="javascript1.2"> </script> <script src="ie4_obj.js" language="jscript"> </script>
A filosofia dessa abordagem era que apenas um navegador capaz de processar JavaScript 1.2 poderia pegar o primeiro arquivo (principalmente o Netscape Navigator 4.x na poca) e apenas um navegador capaz de processar JScript poderia pegar o
23
segundo arquivo (Internet Explorer 4). Pouco prtico? Claro, mas tambm funcionou nos primeiros anos de tentativas de se lidar com efeitos de pginas dinmicas frequentemente falhados em mltiplos navegadores. Outros atributos de scripts vlidos so src, defer e charset. O atributo charset define a codificao de caracteres usada com o script. Geralmente no estabelecido a menos que voc precise de uma codificao diferente de caracteres da que estiver definida para o documento. Um atributo que pode ser bastante til defer. Se voc configurar defer com um valor de "defer", isso indica ao navegador que o script no ir gerar qualquer contedo de documento e que o navegador pode continuar processando o resto do contedo da pgina, retornando para o script quando a pgina tiver sido processada e exibida:
<script type="text/javascript" defer="defer"> ... nenhum contedo sendo gerado </script>
O atributo defer pode ajudar a acelerar o carregamento da pgina quando voc tiver um bloco maior de JavaScript ou incluir uma biblioteca maior de JavaScript. O ltimo atributo, src, tem a ver com o carregamento de arquivos JavaScript externos, o que voc ver mais adiante. Primeiro, porm, examinaremos mais de perto o atributo de tipo text/javascript e o que isso significa para cada navegador.
24
Aprendendo JavaScript Qual a melhor abordagem? Descobri que a maioria dos websites no incorpora bibliotecas JavaScript que sejam to grandes que a colocao de scripts se torne um problema, no em comparao importncia de ser capaz de garantir que as pginas sejam mais fceis de manter. Ainda assim, se voc desenvolver bibliotecas JavaScript mais complexas, talvez deva considerar uma mudana para scripts baseados em rodaps. Independentemente da abordagem que voc usar, seja consistente: coloque seus scripts sempre no elemento head ou sempre na parte de baixo do elemento body.
Todos os navegadores usados para testar as aplicaes deste livro Firefox 3.x, Safari 3.x, Opera 9.x e IE8 suportam a maioria, seno toda, ECMA-262, Edio 3, e at uma parte da prxima gerao de ECMAScript, ECMAScript 3.1 (e posteriores). Neste livro, farei observaes sempre que houver diferenas nos navegadores ou fornecerei formas para contornar problemas relacionados ao uso em mais de um navegador. Tambm usarei o text/javascript mais familiar para o atributo de tipo do elemento script, conforme mostrado no exemplo 1.2.
25
A palavra-chave function seguida pelo nome da funo e por parnteses contendo zero ou mais parmetros (argumentos da funo). No exemplo 1.2, no h parmetros, mas veremos muitos exemplos com parmetros por todo o livro. O script que constitui a funo fica entre as chaves. Eu digo tpica quando forneo a sintaxe da funo porque essa no a nica sintaxe que voc pode usar para criar uma funo. Entretanto, veremos outras variaes comeando pelo captulo 5, que cobre funes JavaScript em detalhes. claro que, assim que voc tiver uma funo, tem que cham-la para executar o script que ela contm, o que nos leva aos manipuladores de eventos.
Manipuladores de eventos
Na tag body de abertura do exemplo 1.2, um atributo HTML chamado onload atribudo funo hello. O atributo onload o que conhecido como manipulador de eventos. Esse manipulador de eventos, e outros, parte do modelo de objetos associado que cada navegador fornece. Voc usa manipuladores de eventos para mapear uma funo para um evento especfico de modo que, quando o evento ocorrer, o script da funo seja processado. Um dos manipuladores de eventos mais usados o recm-demonstrado, o evento onload anexado ao elemento body. Quando a pgina web tiver sido carregada, o evento disparado, e o manipulador chama a funo mapeada. Veja alguns mapeadores de eventos normalmente usados:
onclick
26
onmouseout
Aprendendo JavaScript
Disparado quando o elemento no tem mais o foco. Estes so apenas alguns dos manipuladores de eventos, e nem todos os elementos suportam todos os manipuladores. O manipulador de eventos onload suportado por apenas alguns elementos, como os elementos body e img o que no surpresa, j que o evento est associado ao carregamento de algo. Acrescentar um manipulador de eventos diretamente tag de abertura uma forma de anex-lo. Uma segunda tcnica ocorre diretamente dentro de JavaScript usando uma sintaxe como a seguinte:
<script type="text/javascript"> window.onload=hello; function hello(??) { // diz al para o mundo var msg = "Hello, World!"; document.open(); document.writeln(msg); document.close(); } </script>
O manipulador de eventos onload uma propriedade de outro objeto interno de navegador, o window. A primeira linha do script atribui a funo hello diretamente ao manipulador de eventos onload da janela.
Funes em JavaScript tambm so objetos em JavaScript, de modo que voc pode atribuir uma funo, por nome ou diretamente, a uma varivel ou outra propriedade do objeto.
Usando a abordagem da propriedade do objeto, voc no tem que adicionar manipuladores de eventos como atributos em tags de elementos, mas pode em vez disso adicion-los ao prprio JavaScript. Entraremos em maiores detalhes sobre manipuladores de eventos e formas mais avanadas de manipulao de eventos no incio do captulo 7. Enquanto isso, examinaremos mais de perto o objeto document.
27
Os mtodos open e close no so necessrios para o exemplo 1.2, j que os navegadores abriro e fecharo automaticamente o documento quando o mtodo writeln for chamado depois de ele j ter sido carregado. Se voc usasse o script no corpo da pgina, precisaria chamar explicitamente o mtodo open. O document, assim como o mtodo window mencionado anteriormente, faz parte de uma hierarquia de objetos conhecida como Browser Object Model (BOM). Esse modelo um conjunto bsico de objetos implementados na maioria dos navegadores modernos. Abordarei o document e outros objetos BOM no captulo 9.
BOM a verso mais antiga do Document Object Model (DOM), mais formal, e s vezes chamado de DOM Nvel 0.
Operador property
No exemplo 1.2, voc acessou os mtodos do objeto document por meio de um dos muitos operadores suportados em JavaScript: o operador property, representado por um operador de ponto simples (.). Diversos operadores esto disponveis em JavaScript: os aritmticos (+, -), os de expresses condicionais (>, <) e outros que detalharei mais adiante neste livro. Um dos
28
Aprendendo JavaScript
mais importantes, todavia, o operador property. Elementos de dados, manipuladores de eventos e mtodos de objetos so todos considerados propriedades de objetos dentro de JavaScript, e possvel acessar todos eles por meio do operador property. Voc tambm usa esse operador em um processo chamado de encadeamento de mtodos, ou s vezes apenas encadeamento, por meio do qual voc pode aplicar chamadas a mltiplos mtodos, uma aps a outra, sendo todas dentro da mesma instruo. Veremos o exemplo a seguir no livro:
var tstValue = document.getElementById("test").style.backgroundColor="#ffffff";
Neste exemplo, um elemento page acessado usando o mtodo getElementById do documento, e seu objeto style acessado para configurar a cor de fundo desse elemento. A propriedade backgroundColor pertence ao objeto style, que uma propriedade do objeto document. Cobrirei todos esses mtodos e objetos em captulos posteriores, mas queria apresentar o encadeamento de mtodos agora, j que voc o ver com bastante frequncia. Voc no pode encadear todas as propriedades de todos os objetos apenas aquelas que retornam um objeto.
Uma das bibliotecas Ajax mais populares, JQuery, faz uso intenso de encadeamento de mtodos. Cobrirei a JQuery rapidamente no captulo 14.
29
outra biblioteca poderia sobrescrev-la no usando de forma correta a palavra-chave var, e os dados que voc estava registrando sero perdidos. Estabelecer o escopo de uma varivel importante se voc tiver variveis globais e locais com o mesmo nome. O exemplo 1.2 no tem variveis globais com algum nome, mas importante que se desenvolvam boas prticas de codificao JavaScript desde o incio. Aqui esto as regras quanto ao escopo: Se voc declarar uma varivel com a palavra-chave var em uma funo ou em um bloco de cdigo, seu uso local quela funo. Se voc usar uma varivel sem declar-la com a palavra-chave var, e existir uma varivel global com o mesmo nome, a varivel local assumida como sendo a global j existente. Se voc declarar uma varivel localmente com uma palavra-chave var, mas no a inicializar (i.e., atribuir um valor a ela), ela ser local e ficar acessvel, mas no definida. Se voc declarar uma varivel localmente sem a palavra-chave var, ou se declar-la explicitamente como global mas no a inicializar, ela ser acessvel globalmente, mas tambm no estar definida. Usando var dentro de uma funo, voc pode evitar problemas ao usar variveis globais e locais com o mesmo nome. Isso particularmente importante ao se usar bibliotecas JavaScript como Dojo, jQuery e Prototype porque voc no saber que nomes de variveis o outro cdigo JavaScript est usando.
Instrues (statements)
JavaScript tambm suporta diferentes tipos de instrues de processamento, conhecidos como instrues. O exemplo 1.2 demonstrou um tipo bsico de instruo em JavaScript: a atribuio, na qual um valor atribudo em uma varivel. Outros tipos de instruo so laos for, que processam um bloco de script um determinado nmero de iteraes; a instruo condicional if...else, que verifica uma condio para ver se um bloco de script executado; a instruo switch, que verifica um valor dentro de um determinado conjunto e a seguir executa o bloco de script associado a esse valor; e assim por diante. Cada tipo de instruo contm determinados requisitos sintticos. No exemplo 1.2, a instruo de atribuio terminava com um ponto-e-vrgula. Usar um ponto-e-vrgula para terminar uma instruo no um requisito em JavaScript, a menos que voc queira digitar muitas instrues na mesma linha. Se for faz-lo, ter que inserir um ponto-e-vrgula para separar as instrues individuais.
30
Aprendendo JavaScript
Quando voc digita uma instruo completa em uma linha, usa uma quebra de linha para termin-lo. Todavia, da mesma forma que com o uso de var, uma boa prtica usar ponto-e-vrgulas para terminar todas as instrues, seno para tornar o cdigo mais fcil de ler. Veja mais sobre o ponto-e-vrgula, outros operadores e instrues no captulo 3.
Comentrios
Como espero que este captulo demonstre, h muita coisa em JavaScript, mesmo em uma aplicao pequena como a do exemplo 1.2. Espere um pouco, porm, j que ainda no terminamos. Por fim, mas certamente no menos importante, vamos ver um pouco mais sobre comentrios em JavaScript. Os comentrios fornecem um resumo ou explicao do cdigo que se segue. Comentrios em JavaScript so uma forma extremamente til de fazer observaes rapidamente sobre o que um bloco de cdigo faz ou quais dependncias ele tem. Eles tornam o cdigo mais legvel e mais fcil de manter. Voc pode usar dois tipos diferentes de comentrios em suas aplicaes. O primeiro, usando as barras duplas (//), comenta o que estiver a seguir na mesma linha:
// Esta uma linha comentada var i = 1; // este um comentrio de linha
O segundo faz uso dos delimitadores de abertura e fechamento de comentrios em JavaScript, /* e */, para marcar um bloco de comentrios que pode se estender por uma ou mais linhas:
/* Este um comentrio multilinhas que se estende por trs linhas. Comentrios multilinhas so especialmente teis para comentar uma funo*/
Comentrios de apenas uma linha so relativamente seguros de usar, mas os de vrias linhas podem gerar problemas se o caractere inicial ou final for apagado acidentalmente. Em geral, usamos comentrios de linha nica antes de um bloco de script executando um determinado processo ou criando um objeto especfico; usamos comentrios de blocos de vrias linhas no incio de um arquivo JavaScript. Uma boa prtica a adotar com JavaScript comear cada bloco, funo ou definio de objeto em JavaScript com pelo menos uma linha de comentrio. Alm disso, fornea um bloco de comentrios mais detalhados no incio de todos os arquivos de bibliotecas em JavaScript; inclua informaes sobre autor, data e dependncias, assim como um objetivo detalhado do script. J exploramos o que voc viu no exemplo 1.2. Agora examinaremos o que voc no viu.
31
JavaScript ignoravam o script dentro desses comentrios, mas os navegadores mais novos sabiam execut-lo. Era algo no muito sofisticado, porm, muito usado. A maioria das pginas web com JavaScript atualmente apresenta comentrios HTML acrescentados porque mais comum que o script seja copiado do que no. Infelizmente, alguns navegadores novos hoje podem processar a pgina web como XHTML, e estritamente como XML, o que significa que o cdigo comentado descartado. Como consequncia, o uso de comentrios em HTML para esconder o script desencorajado. Outra forma de esconder script, porm, encorajada: por meio do uso da seo XML CDATA, especialmente se o script for ser usado em XHTML. O exemplo 1.3 uma modificao do exemplo 1.2 com a adio de uma seo CDATA, mostrada em negrito.
Exemplo 1.3 Modificao do exemplo 1.2 para acrescentar uma seo CDATA para esconder o script
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <title>Hello, World!</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript"> //<![CDATA[ function hello() { // diz al para o mundo var msg = "Hello, <em>World!</em>"; document.open(); document.write(msg); document.close(); } //]]> </script> </head> <body onload="hello()"> <p>Hi</p> </body> </html>
32
Aprendendo JavaScript
O motivo para a seo CDATA que processadores XHTML interpretam marcao, como as tags de abertura e fechamento em nesse novo exemplo, mesmo quando eles esto dentro de strings JavaScript. Embora o script possa ser processado corretamente e tambm exibir a pgina de forma correta, se voc tentar valid-lo sem a seo CDATA obter erros de validao, conforme mostra a figura 1.1.
Supe-se que o JavaScript que importado para a pgina usando o atributo src do elemento script seja compatvel com XHTML e no requeira a seo CDATA. Voc deve, contudo, delimitar JavaScript in-line ou embutido com CDATA, especialmente se estiver dentro do elemento body. Para a maioria dos navegadores, voc tambm precisar esconder as tags de abertura e fechamento da seo CDATA com comentrios (//), conforme mostrado anteriormente no exemplo 1.3, ou obter um erro JavaScript. claro que a melhor forma de manter suas pginas web organizadas remover inteiramente JavaScript das mesmas, por meio do uso de arquivos JavaScript. A maioria dos exemplos deste livro inserida nas pginas principalmente para tornlas mais fceis de serem lidas e seguidas. Todavia, a Mozilla Foundation recomenda (e eu concordo) que todo JavaScript in-line ou embutido seja removido de uma pgina e colocado em arquivos JavaScript separados. Usar um arquivo separado, o que coberto na prxima seo, evita problemas com validao e interpretao incorreta de texto, independentemente de a pgina ser processada como HTML ou XHTML.
Arquivos JavaScript tambm so mais eficientes, j que o navegador os coloca em cache na primeira vez em que so carregados. Referncias adicionais ao mesmo arquivo so trazidas da cache.
33
Arquivos JavaScript
O uso de JavaScript est se tornando mais orientado a objetos e complexo. Para simplificar seu trabalho, assim como para compartilh-lo, desenvolvedores JavaScript esto criando objetos JavaScript reutilizveis que podem ser incorporados em muitas aplicaes, incluindo aquelas criadas por outros desenvolvedores. A nica forma eficiente de se compartilhar esses objetos cri-los em arquivos separados e fornecer um link para cada arquivo na pgina web. Agora com o cdigo em arquivos, tudo o que o desenvolvedor precisa fazer conectar o cdigo s pginas web. Se o cdigo precisar ser alterado posteriormente, ele o em apenas um lugar. Atualmente, mesmo o JavaScript mais simples criado em arquivos de script separados. Qualquer overhead que seja criado pelo uso de vrios arquivos compensado pelos benefcios gerados. Para incluir uma biblioteca JavaScript ou arquivo de script em sua pgina web, use esta sintaxe:
<script type="text/javascript" src="algumjavascript.js"></script>
O elemento script no contm contedo, mas a tag de fechamento ainda assim necessria. O navegador carrega os arquivos de script para a pgina na ordem na qual eles aparecem na mesma e os processa em ordem a menos que defer seja usado. Um arquivo de script deve ser tratado como se o cdigo estivesse realmente inserido na pgina: o comportamento no diferente entre arquivos de script e blocos de JavaScript embutido. O exemplo 1.4 outra modificao de nossa aplicao Hello, World! , exceto que, dessa vez, o script movido para um arquivo separado, chamado helloworld.js. A extenso .js necessria, a menos que voc direcione o servidor web para usar alguma outra extenso para representar o tipo MIME JavaScript. Entretanto, pelo fato de a .js ser usada como padro h anos, melhor no inventar moda.
Toda regra sempre tem excees, e o uso de .js uma delas. Se o JavaScript for gerado dinamicamente usando uma aplicao no lado servidor construda em uma linguagem como PHP, o arquivo ter uma extenso diferente.
O exemplo 1.4 contm o script, e o exemplo 1.5 mostra a pgina web agora alterada.
34
function hello() { } // diz al para o mundo var msg = "Hello, <em>World!</em>"; document.open(); document.write(msg); document.close();
Aprendendo JavaScript
Como voc pode ver, a pgina fica muito mais limpa, e a aplicao mais eficiente a partir de uma perspectiva de manuteno. Alm disso, outras aplicaes agora podem reutilizar o cdigo. Embora seja improvvel que voc reutilizasse algo to simples quanto o script Hello, World! , criar exemplos mais adiante neste livro nos quais a reutilizao se torna mais importante. Temos uma ltima seo de material a cobrir neste captulo antes de passar para variveis e tipos de dados no captulo 2.
35
Muitas das melhores prticas esto associadas a JavaScript mas, se houver uma para se usar deste livro, a seguinte: seja qual for a funcionalidade JavaScript que voc crie, ela no deve atrapalhar o uso de seu site pelos visitantes. O que quero dizer por atrapalhar o uso do seu site pelos visitantes? Quero dizer que voc deve evitar o uso de JavaScript de uma forma em que aqueles que no podem, ou no iro, habilitar JavaScript, fiquem impedidos de acessar recursos essenciais do site. Se voc criar um menu drop-down usando JavaScript, tambm precisa fornecer uma alternativa que no use script. Se seus visitantes tiverem deficincias visuais, JavaScript no deve interferir em navegadores de udio, o que acontece quando instrues so adicionadas a uma pgina dinamicamente. Muitos desenvolvedores no seguem esses princpios porque supem que as prticas requerem trabalho adicional e, em sua maior parte, requerem. Entretanto, o trabalho no precisa ser um fardo no quando os resultados podem aumentar a acessibilidade de seu site. Alm disso, muitas empresas agora exigem que seus websites satisfaam a um determinado nvel de acessibilidade. melhor desenvolver o hbito de criar pginas acessveis no incio do que tentar consert-las, ou seus hbitos, posteriormente.
Diretrizes de acessibilidade
O site WebAIM (http://www.webaim.org) contm um timo tutorial sobre a criao de JavaScript acessvel (disponvel em http://www.webaim.org/techniques/javascrip/). Ele cobre as maneiras como voc no deve usar JavaScript, como o uso de JavaScript para menus e outros tipos de navegao. Todavia, o site fornece formas para voc usar JavaScript para tornar um site mais acessvel. Uma sugesto basear a resposta em eventos que possam ser disparados quer voc use um mouse ou no. Por exemplo, em vez de capturar cliques do mouse, voc deve capturar eventos que sejam disparados se voc usar um teclado ou um mouse, como onfocus e onblur. Se voc tiver um menu drop-down, adicione um link para uma pgina separada e fornea um menu esttico nessa segunda pgina. Depois de revisar o tutorial na WebAIM, voc talvez queira dedicar algum tempo Web Accessibility Initiative do World Wide Consortium (W3C) (em http://www. w3.orh/WAI/). A partir da, voc tambm pode acessar o website da Seo 508 do governo norte-americano (http://www.section508.gov/), que discute o que conhecido como compatibilidade 508 . Sites que sejam compatveis com a Seo 508 so acessveis independentemente de restries fsicas. Nesse website, voc pode acessar diversas ferramentas que avaliam seu site quanto acessibilidade, como Cynthia Says (em http://www.cynthiasays.com/).
36
Aprendendo JavaScript
Esteja seu site localizado dentro dos Estados Unidos ou no, voc desejar que ele seja acessvel. Assim, uma visita Seo 508 til independentemente de sua localizao. claro que nem todos os problemas de acessibilidade esto relacionados queles navegadores nos quais JavaScript est limitado ou desabilitado como padro, como com leitores de tela. Muitas pessoas no confiam em JavaScript, ou no ligam para a linguagem e preferem desabilit-la. Para ambos os grupos de pessoas aquelas que preferem no usar JavaScript e as que no tm escolha importante que se forneam alternativas quando nenhum script estiver presente. Uma alternativa noscript.
noscript
Alguns navegadores ou outras aplicaes no esto preparados para processar JavaScript ou esto limitados no modo de interpretao do script. Se JavaScript no for essencial para a navegao ou interao, e o navegador ignorar o script, no h prejuzo. Entretanto, se JavaScript for essencial para o acesso de recursos do site e voc no fornecer alternativas, est basicamente mandando essas pessoas embora. Anos atrs, quando JavaScript era razoavelmente uma novidade, uma abordagem popular era fornecer uma pgina simples ou apenas de texto acessvel por meio de um link, geralmente colocado no topo da pgina. Contudo, a quantidade de trabalho para realizar a manuteno dos dois sites poderia ser proibitiva e os desenvolvedores tinham que se preocupar constantemente em manter os sites sincronizados. Uma tcnica melhor fornecer alternativas estticas ao contedo dinmico gerado por script. Quando voc usa JavaScript para criar um menu drop-down, tambm fornece um menu com links hierrquicos padro; quando voc usa script para mostrar elementos de formulrio para edio baseados em interao com o usurio, fornece os links mais tradicionais para uma segunda pgina fazer o mesmo. O elemento que permite tudo isso noscript. Onde quer que voc precise de contedo esttico, adicione um elegante noscript com o contedo dentro das tags de abertura e fechamento. Assim, se um navegador ou outra aplicao no puder processar o script (devido a JavaScript no estar habilitado por algum motivo), o contedo noscript processado; caso contrrio, ele ignorado. O exemplo 1.6 uma ltima variao de Hello, World! mostrando o exemplo protegido por CDATA modificado com a adio de noscript. Acessar a pgina com um navegador habilitado com JavaScript deve exibir uma pgina com Hello, World! impresso. Entretanto, se voc acessar essa pgina com um navegador com scripts desabilitados, uma mensagem diferente ser exibida.
37
claro que o exemplo 1.6 apenas um uso simplificado de noscript; voc ver usos mais sofisticados mais adiante no livro, assim como mtodos alternativos com proteo para scripts. Para testar o exemplo 1.6, usei uma extenso Firefox chamada de Web Developer Toolbar. Nessa barra fica uma opo para desabilitar o suporte a JavaScript. Quando JavaScript estiver ativo, a mensagem original Hello, World! exibida. Contudo, quando uso a ferramenta para desativar o suporte a JavaScript, outra mensagem exibe: I'm still here, world! Embora voc possa desativar o scripting diretamente no navegador, descobri que ferramentas de desenvolvimento como a Web Developer Toolbar tornam o teste muito mais fcil. Quais ferramentas voc usa depende do navegador com o qual voc prefere desenvolver. Prefiro desenvolver com o Firefox e fazer uso extensivo da Web Developer Toolbar e do Firebug, uma ferramenta sofisticada de depurao. Mais adiante, no captulo 6, que cobre a deteco e soluo de problemas e a depurao, examinaremos mais de perto esses tpicos, assim como outras ferramentas e opes disponveis para outros navegadores.