<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JulioGreff.net &#187; acessibilidade</title>
	<atom:link href="http://juliogreff.net/tag/acessibilidade/feed/" rel="self" type="application/rss+xml" />
	<link>http://juliogreff.net</link>
	<description>A mesma web, um novo estilo de desenvolvimento</description>
	<lastBuildDate>Sat, 07 May 2011 17:07:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Hijax: Ajax Acessível</title>
		<link>http://juliogreff.net/hijax-ajax-acessivel/</link>
		<comments>http://juliogreff.net/hijax-ajax-acessivel/#comments</comments>
		<pubDate>Thu, 22 May 2008 20:08:11 +0000</pubDate>
		<dc:creator>Julio Greff</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Usabilidade/Acessibilidade]]></category>
		<category><![CDATA[acessibilidade]]></category>
		<category><![CDATA[boas práticas]]></category>
		<category><![CDATA[hijax]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[kiss]]></category>

		<guid isPermaLink="false">http://juliogreff.blog.br/?p=145</guid>
		<description><![CDATA[De longe, um dos maiores problemas no uso de Ajax é a acessibilidade. A facilidade em atualizar apenas uma parte da página tornou os desenvolvedores menos preocupados com a acessibilidade de seus projetos. Sem JavaScript, sites inteiros tornam-se completamente inacessíveis. Então, qual a solução para esse problema? Para evitar que o caos venha a este [...]

<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/ajax-vs-acessibilidade/' rel='bookmark' title='Permanent Link: Ajax vs. Acessibilidade'>Ajax vs. Acessibilidade</a></li>
<li><a href='http://juliogreff.net/ajax-vs-moda-vs-performance/' rel='bookmark' title='Permanent Link: Ajax vs. Moda vs. Performance'>Ajax vs. Moda vs. Performance</a></li>
<li><a href='http://juliogreff.net/a-aplicacao-ajax-perfeita/' rel='bookmark' title='Permanent Link: A Aplicação Ajax Perfeita'>A Aplicação Ajax Perfeita</a></li>
<li><a href='http://juliogreff.net/fila-de-requisicoes-em-ajax/' rel='bookmark' title='Permanent Link: Fila de Requisições em Ajax'>Fila de Requisições em Ajax</a></li>
<li><a href='http://juliogreff.net/ajax-com-a-mootools/' rel='bookmark' title='Permanent Link: Ajax com a Mootools'>Ajax com a Mootools</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>De longe, um dos maiores problemas no uso de Ajax é a acessibilidade. A facilidade em atualizar apenas uma parte da página tornou os desenvolvedores menos preocupados com a acessibilidade de seus projetos. Sem JavaScript, sites inteiros tornam-se <strong>completamente inacessíveis</strong>. Então, qual a solução para esse problema?</p>
<p>Para evitar que o caos venha a este mundo, surge outra palavrinha: <strong>Hijax</strong>. Mas primeiro vamos voltar a algumas premissas do desenvolvimento web: <strong>aprimoramento progressivo</strong> (<strong>progressive enhancement</strong>) e <strong>degradação elegante</strong> (<strong>graceful degradation</strong>), e me desculpem se errei a tradução dos termos&#8230;</p>
<h3>Aprimoramento Progressivo &#8211; Primeiro o Conteúdo</h3>
<p>Ninguém começa (ou pelo menos não deveria começar) a desenvolver uma aplicação primeiro pela camada de comportamento, isso vai completamente contra a filosofia de desenvolvimento em camadas (primeiro o conteúdo, depois a apresentação e, por último, o comportamento).</p>
<p>A idéia é começar o desenvolvimento de baixo. Em outras palavras, desenvolva da maneira antiga, usando links como sempre se usou desde que a Internet é Internet, devolvendo páginas inteiras como resposta. Depois, somente depois, comece a adicionar funcionalidades <strong>que melhorem a experiência do usuário</strong> (nada de frescuras que o usuário só vai achar bonito, <a href="http://juliogreff.net/ajax-vs-acessibilidade/" title="Ajax vs. Acessibilidade">pra que reinventar o link?</a>).</p>
<h3>Degradação Elegante &#8211; Útil sem perder a elegância</h3>
<p>&#8220;Degradação elegante&#8221; significa perder alguns recursos sem perder suas funcionalidades. Pode-se perder algumas animações e outros fru-frus, mas perder acesso ao conteúdo é inadmissível. CSS não é tão importante quanto as informações que queremos mostrar. Nunca ouviu a frase &#8220;mais ajuda quem não atrapalha&#8221;? A idéia é a mesma.</p>
<p>O desenvolvimento progressivo e em camadas é o caminho mais rápido para a degradação elegante. Mesmo utilizando Ajax, o conteúdo ainda deve continuar acessível através de um link comum. É aí onde <strong>Hijax</strong> entra.</p>
<h3>Hijax &#8211; Seqüestrando os Links</h3>
<p>O próprio termo explica bem o uso da técnica. <a href="http://domscripting.com/blog/display/41" title="Hijax - DOM Scripting" rel="external">Hijax</a>, do inglês hijack (&#8220;seqüestrar&#8221;), quer dizer <strong>seqüestrar</strong> os links comuns, e transformá-los em links Ajax. Simples assim.</p>
<p>&#8220;Simples assim&#8221;? Bem, nem tanto, eu confesso. Seus scripts server-side precisam estar preparados para decidir se enviam o &#8220;pacote completo&#8221; ou a &#8220;versão básica&#8221; da página, se for uma requisição normal ou uma requisição assíncrona, respectivamente. Uma breve dica: header <code>X-Requested-With</code>. Duas versões do site? Nunca mais, isso morreu junto com o Netscape, há muito tempo.</p>
<p>Vale lembrar que somente o uso de Hijax não faz uma aplicação completamente acessível, usável e rica. Há muito mais a se pensar. Já falei sobre <a href="http://juliogreff.net/a-aplicacao-ajax-perfeita/" title="A Aplicação Ajax Perfeita">alguns aspectos para uma boa aplicação Ajax</a>, mas tenho absoluta certeza que não passei nem perto de tudo que é necessário. Mas tudo isso já é uma boa base a ser levada em consideração, e com isso já é possível criar algo melhor que muita coisa que existe por aí, tenha certeza. E você, tem feito seu dever de casa e seguido princípios para tornar sua aplicação disponível a todos?</p>


<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/ajax-vs-acessibilidade/' rel='bookmark' title='Permanent Link: Ajax vs. Acessibilidade'>Ajax vs. Acessibilidade</a></li>
<li><a href='http://juliogreff.net/ajax-vs-moda-vs-performance/' rel='bookmark' title='Permanent Link: Ajax vs. Moda vs. Performance'>Ajax vs. Moda vs. Performance</a></li>
<li><a href='http://juliogreff.net/a-aplicacao-ajax-perfeita/' rel='bookmark' title='Permanent Link: A Aplicação Ajax Perfeita'>A Aplicação Ajax Perfeita</a></li>
<li><a href='http://juliogreff.net/fila-de-requisicoes-em-ajax/' rel='bookmark' title='Permanent Link: Fila de Requisições em Ajax'>Fila de Requisições em Ajax</a></li>
<li><a href='http://juliogreff.net/ajax-com-a-mootools/' rel='bookmark' title='Permanent Link: Ajax com a Mootools'>Ajax com a Mootools</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://juliogreff.net/hijax-ajax-acessivel/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>A Aplicação Ajax Perfeita</title>
		<link>http://juliogreff.net/a-aplicacao-ajax-perfeita/</link>
		<comments>http://juliogreff.net/a-aplicacao-ajax-perfeita/#comments</comments>
		<pubDate>Thu, 07 Jun 2007 16:39:00 +0000</pubDate>
		<dc:creator>Julio Greff</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[acessibilidade]]></category>
		<category><![CDATA[boas práticas]]></category>
		<category><![CDATA[cross browser]]></category>
		<category><![CDATA[filosofia]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[usabilidade]]></category>

		<guid isPermaLink="false">http://www.juliogreff.blog.br/a-aplicacao-ajax-perfeita/</guid>
		<description><![CDATA[Tempos atrás andei pensando sobre uma aplicação Ajax. O que ela deveria ser, como deveria funcionar, tudo o que precisaria ter. Incrementei a idéia, pensando na acessibilidade, usabilidade, unobstrusividade, essas coisas. Cheguei a conclusão que não existem muitas dessas por aí. Não que essa idéia fosse &#8220;a aplicação ajax perfeita&#8221;, mas sim a ideal. Demoraria [...]

<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/hijax-ajax-acessivel/' rel='bookmark' title='Permanent Link: Hijax: Ajax Acessível'>Hijax: Ajax Acessível</a></li>
<li><a href='http://juliogreff.net/ajax-vs-acessibilidade/' rel='bookmark' title='Permanent Link: Ajax vs. Acessibilidade'>Ajax vs. Acessibilidade</a></li>
<li><a href='http://juliogreff.net/fila-de-requisicoes-em-ajax/' rel='bookmark' title='Permanent Link: Fila de Requisições em Ajax'>Fila de Requisições em Ajax</a></li>
<li><a href='http://juliogreff.net/ajax-vs-moda-vs-performance/' rel='bookmark' title='Permanent Link: Ajax vs. Moda vs. Performance'>Ajax vs. Moda vs. Performance</a></li>
<li><a href='http://juliogreff.net/ajax-requisicoes-head/' rel='bookmark' title='Permanent Link: Ajax: Requisições HEAD'>Ajax: Requisições HEAD</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Tempos atrás andei pensando sobre uma aplicação Ajax. O que ela deveria ser, como deveria funcionar, tudo o que precisaria ter. Incrementei a idéia, pensando na <a href="http://juliogreff.net/ajax-vs-acessibilidade/">acessibilidade</a>, usabilidade, unobstrusividade, essas coisas. Cheguei a conclusão que não existem muitas dessas por aí.</p>
<p>Não que essa idéia fosse &#8220;a aplicação ajax perfeita&#8221;, mas sim a ideal. Demoraria muito a ser feita, mas eu consideraria uma obra de arte.</p>
<h3>Padronização</h3>
<p>Essa parte é a parte fácil, que todo mundo <strong>sempre</strong> deveria se dar ao trabalho de fazer: manter seu trabalho dentro dos web standards.</p>
<p>Validar sua marcação, seus CSSs, isso todo mundo faz (ou deveria). Mas às vezes um certo item é deixado de lado: seus XMLs, que não causariam muito problema, a não ser um XML em especial: os feeds. Ou seja, valide tudo que possa ser validado.</p>
<h3>Manutenção</h3>
<p>Código bom é código comentado. Disso ninguém discorda. Sempre comente seus códigos, tanto para seu uso em futuras manutenções e atualizaçãoes, quanto para seus visitantes que querem descobrir o segredo daquela técnica inovadora que você implementou. JavaScript ninguém esconde, e uma técnica nova deveria poder chegar a todos que quisessem, mesmo que seja investigando seu código. Melhor ainda se ele estiver comentado, mesmo que seja somente em partes mais obscuras.</p>
<p>E o tamanho do código não aumentaria? Sim, mas você só precisará comentar partes essenciais, aquelas mais complicadas que você sabe que irá esquecer com o tempo. Além do mais, se você esquecer de seu código, perderá muito tempo até lembrar o que cada parte faz.</p>
<h3>Compatibilidade</h3>
<p>Outra parte facílima, mas indispensável. Se tudo for seguido, nem tanto, mas ainda assim se torna muito mais agradável usar uma aplicação que funcione como deveria funcionar.</p>
<p>Com todas as opções de browsers existentes hoje, sempre haverá aquele que terá problemas (geralmente o azulzinho que todo mundo já conhece). Mas existem maneiras de amenizar o problema. Isso não só com Ajax, mas qualquer &#8220;defeito&#8221; de JavaScript e CSS que possa atrapalhar a experiência do usuário.</p>
<p>Essa parte pode, sem problemas, ser deixada para os frameworks já existentes, que fazem seu trabalho muito bem. A compatibilidade vem sendo muito focada por essas bibliotecas, facilitando, e muito, seu trabalho.</p>
<h3>Controle de readyStates</h3>
<p>Agora começa a parte divertida. Tudo que está logo acima qualquer um faz. Vamos começar adicionando nossos diferenciais.</p>
<p>Geralmente, costuma-se cuidar de apenas dois readyStates: 1 e 4 (aberto e carregado), que resultam no clássico &#8220;Carregando&#8230;&#8221; e a requisição completa. Não que seja necessário, mas um controle completo de estados poderia ser bom.</p>
<p>O usuário saber que sua requisição está sendo processada ajuda, já que não pensaria que a requisição travou (isso acontece bastante quando a requisição demora demais).</p>
<p>Coloquei os readyStates, o que significam e uma sugestão para o texto de carregamento. Os readyStates 0 e 4 não precisam disso, já que 0 não tem muito uso, e 4 terá sua própria função.</p>
<ul>
<li><strong>Não Inicializado (0)</strong></li>
<li><strong>Aberto (1)</strong>: &#8220;Abrindo Requisição&#8221; ou &#8220;Iniciando Requisição&#8221;</li>
<li><strong>Enviado (2)</strong>: &#8220;Enviando Dados&#8221;</li>
<li><strong>Recebendo (3)</strong>: &#8220;Carregando&#8221; ou &#8220;Recebendo Dados&#8221;</li>
<li><strong>Completo (4)</strong></li>
</ul>
<p>Não que seja necessário, mas também seria válido cuidar dos status da requisição também, pelo menos 200 (OK), 404, 500, e os outros erros mais comuns.</p>
<h3>Histórico</h3>
<p>Esse é o maior problema das aplicações Ajax. Já faz tempo que <a title="Ativando o Botão Voltar" href="http://juliogreff.net/ativando-o-botao-voltar/">as primeiras soluções para histórico apareceram</a>, e <a title="Histórico para Navegação via JavaScript" href="http://juliogreff.net/historico-para-navegacao-via-javascript/">outras melhoradas</a>, e ainda há centenas de aplicações que não se dão ao trabalho de implementar qualquer das soluções.</p>
<p>O histórico <strong>sempre</strong> deve ser implementado, mesmo que sua aplicação não queira dominar o mundo.</p>
<h3>Cache</h3>
<p>O cache, considerado uma praga por muitos, pode ser de uma grande ajuda para sua aplicação. Sempre que se faz uma requisição estática (que não muda em pouco tempo), deve-se usar o cache, pois quando refizermos essa requisição, ela terminará mais rápido.</p>
<p>Além do mais, usando o histórico, podemos guardar requisições &#8220;cacheadas&#8221; no próprio JavaScript. Assim, mais rápido ainda.</p>
<p>É claro que, em requisições dinâmicas, não devemos usar essa técnica. Ela pode prejudicar o usuário, pois não há maneira de atualizar a página através do F5.</p>
<h3>Filas de Requisição</h3>
<p>Todos sabem que se quando uma requisição estiver em andamento, e outra for iniciada, a primeira será cancelada.</p>
<p>Assim como o histórico, já existem milhares de soluções diferentes para <a title="Fila de Requisições em Ajax" href="http://juliogreff.net/fila-de-requisicoes-em-ajax/">fila de requisições</a>. Esse recurso deve também ser usado sempre que possível (ou seja, sempre). Isso pode evitar aborrecimentos ao usuário.</p>
<h3>Inobstrusividade</h3>
<p>Essa é a questão mais polêmica. Sua aplicação não deve usar JavaScript obstrusivo (ou usar o menos possível), fazendo-a de maneira que funcione corretamente em qualquer browser.</p>
<p>E o Ajax sem JavaScript, como fica? Também tive idéias mirabolantes quanto a isso. Você deve usar o mesmo script server-side tanto para requisições assíncronas (Ajax) quanto para as síncronas (me refiro àquelas via browser). Para isso, usamos aquele header <code>X-Requested-With</code>, que seu server-side deve identificar.</p>
<p>Dessa maneira, não &#8220;trancamos&#8221; o conteúdo nem ao usuário nem aos buscadores e afins. Benefícios ao usuário e a você (e ao seu bolso, se for o caso).</p>
<p>Lembre-se de tornar o conteúdo Ajax-less atrativo aos olhos do usuário também, usando o mesmo layout do resto da aplicação (ou a mesma estrutura, caso seja XML).</p>
<h3>Desempenho</h3>
<p>O desempenho é outra característica muito essencial. Em tráfego de dados muito grande, devemos tomar cuidado com o JavaScript. Muito <a title="responseXML" href="http://juliogreff.net/responsexml/">XML</a> gera muitas chamadas ao DOM, e isso leva tempo. Aí o <a title="JavaScript Object Notation" href="http://juliogreff.net/javascript-object-notation/">JSON</a> entra em cena.</p>
<p>O Profiler do Firebug pode ser muito útil, já que ele monitora o tempo de execução da sua aplicação e das requisições que ela faz.</p>
<p>Bem, é isso. Quem sabe um dia veremos uma aplicação destas. Estou trabalhando em uma função que faça boa parte disso, espero que consiga terminar. Fui!</p>


<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/hijax-ajax-acessivel/' rel='bookmark' title='Permanent Link: Hijax: Ajax Acessível'>Hijax: Ajax Acessível</a></li>
<li><a href='http://juliogreff.net/ajax-vs-acessibilidade/' rel='bookmark' title='Permanent Link: Ajax vs. Acessibilidade'>Ajax vs. Acessibilidade</a></li>
<li><a href='http://juliogreff.net/fila-de-requisicoes-em-ajax/' rel='bookmark' title='Permanent Link: Fila de Requisições em Ajax'>Fila de Requisições em Ajax</a></li>
<li><a href='http://juliogreff.net/ajax-vs-moda-vs-performance/' rel='bookmark' title='Permanent Link: Ajax vs. Moda vs. Performance'>Ajax vs. Moda vs. Performance</a></li>
<li><a href='http://juliogreff.net/ajax-requisicoes-head/' rel='bookmark' title='Permanent Link: Ajax: Requisições HEAD'>Ajax: Requisições HEAD</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://juliogreff.net/a-aplicacao-ajax-perfeita/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Ajax vs. Moda vs. Performance</title>
		<link>http://juliogreff.net/ajax-vs-moda-vs-performance/</link>
		<comments>http://juliogreff.net/ajax-vs-moda-vs-performance/#comments</comments>
		<pubDate>Sun, 11 Mar 2007 16:24:31 +0000</pubDate>
		<dc:creator>Julio Greff</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Usabilidade/Acessibilidade]]></category>
		<category><![CDATA[acessibilidade]]></category>
		<category><![CDATA[boas práticas]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://www.juliogreff.blog.br/?p=77</guid>
		<description><![CDATA[Lendo o Tableless, &#8220;Cuidado para não regredir&#8220;, continua a velha discussão sobre o que é bom, o que é moda e o que realmente não presta pra nada (esse último não é o caso de nenhum dos dois posts&#8230;). Vamos à uma discussão rapidinha. Pense: vale a pena escrever uma montanha de código JavaScript, correndo [...]

<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/hijax-ajax-acessivel/' rel='bookmark' title='Permanent Link: Hijax: Ajax Acessível'>Hijax: Ajax Acessível</a></li>
<li><a href='http://juliogreff.net/ajax-vs-acessibilidade/' rel='bookmark' title='Permanent Link: Ajax vs. Acessibilidade'>Ajax vs. Acessibilidade</a></li>
<li><a href='http://juliogreff.net/a-aplicacao-ajax-perfeita/' rel='bookmark' title='Permanent Link: A Aplicação Ajax Perfeita'>A Aplicação Ajax Perfeita</a></li>
<li><a href='http://juliogreff.net/fila-de-requisicoes-em-ajax/' rel='bookmark' title='Permanent Link: Fila de Requisições em Ajax'>Fila de Requisições em Ajax</a></li>
<li><a href='http://juliogreff.net/ajax-requisicoes-head/' rel='bookmark' title='Permanent Link: Ajax: Requisições HEAD'>Ajax: Requisições HEAD</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Lendo o <a title="Tableless" rel="external" href="http://www.tableless.com.br">Tableless</a>, &#8220;<a title="Cuidado para não regredir" rel="external" href="http://www.tableless.com.br/cuidado-para-nao-regredir">Cuidado para não regredir</a>&#8220;, continua a velha discussão sobre o que é bom, o que é moda e o que realmente não presta pra nada (esse último não é o caso de nenhum dos dois posts&#8230;).</p>
<p>Vamos à uma discussão rapidinha. Pense: vale a pena escrever uma montanha de código JavaScript, correndo o risco de ficar completamente inacessível para alguns browsers, quebrar a cabeça, fazer algo bonitinho que demora o dobro pra carregar, sabendo que você podia escrever uma (uma só, nada mais, sem exagero) única linha? É o caso do pessoal que faz todos os links usando Ajax.</p>
<p>E não é só isso. Há muita coisa que poderia ser evitada. Carregar páginas quase inteiras, pequenos textos estáticos (babem&#8230;), outras coisinhas irritantes que pulam na tela&#8230; Quer que eu prove que não melhora a performance?  <a title="XML HTTP Performance and Caching" rel="external" href="http://me.eae.net/archive/2005/04/02/xml-http-performance-and-caching/">XML HTTP Performance and Caching</a>. Creio que posso te convencer.</p>
<p>Descartando a acessibilidade por enquanto. Um site que use Ajax, pra ser mais útil e mais rápido, precisa de muito planejamento. Um ótimo exemplo de planejamento é o Gmail e Google Reader. Inclua a acessibilidade: ainda temos o Google na frente (Gmail sem Ajax também existe). Uma <a title="As Verdadeiras Restrições do Ajax" rel="external" href="http://ajaxonline.com.br/forum/viewtopic.php?t=7">boa discussão</a> sobre isso também rolou lá no Ajax Online.</p>
<p>Apesar de tudo, ainda acredito que já evoluímos muito, e estamos evoluindo. O Ajax no Brasil já amadureceu bastante (até o Ajax Online abandonou a versão 100% Ajax, evolução). Ainda temos muito a progredir, e vai demorar, eu sei, mas não podemos parar. Graças a muita gente já temos trabalhos bons. Agora queremos trabalhos ótimos, basta amadurecer a idéia.</p>
<p>Esta é a minha opinião, não tomem como certa. Apenas pense sobre isso, concorde ou não. Até!</p>
<p class="post-see">Também já havia falado sobre essas algumas questões relacionadas a Ajax em <a href="http://juliogreff.net/ajax-vs-acessibilidade/" title="Ajax vs. Acessibilidade">Ajax vs. Acessibilidade</a>. Também falei sobre <a href="http://juliogreff.net/a-aplicacao-ajax-perfeita/" title="A Aplicação Ajax Perfeita">A Aplicação Ajax Perfeita</a>, que pode colocar algumas minhocas em sua cabeça&#8230;</p>


<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/hijax-ajax-acessivel/' rel='bookmark' title='Permanent Link: Hijax: Ajax Acessível'>Hijax: Ajax Acessível</a></li>
<li><a href='http://juliogreff.net/ajax-vs-acessibilidade/' rel='bookmark' title='Permanent Link: Ajax vs. Acessibilidade'>Ajax vs. Acessibilidade</a></li>
<li><a href='http://juliogreff.net/a-aplicacao-ajax-perfeita/' rel='bookmark' title='Permanent Link: A Aplicação Ajax Perfeita'>A Aplicação Ajax Perfeita</a></li>
<li><a href='http://juliogreff.net/fila-de-requisicoes-em-ajax/' rel='bookmark' title='Permanent Link: Fila de Requisições em Ajax'>Fila de Requisições em Ajax</a></li>
<li><a href='http://juliogreff.net/ajax-requisicoes-head/' rel='bookmark' title='Permanent Link: Ajax: Requisições HEAD'>Ajax: Requisições HEAD</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://juliogreff.net/ajax-vs-moda-vs-performance/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ajax vs. Acessibilidade</title>
		<link>http://juliogreff.net/ajax-vs-acessibilidade/</link>
		<comments>http://juliogreff.net/ajax-vs-acessibilidade/#comments</comments>
		<pubDate>Mon, 23 Oct 2006 23:11:18 +0000</pubDate>
		<dc:creator>Julio Greff</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Usabilidade/Acessibilidade]]></category>
		<category><![CDATA[acessibilidade]]></category>
		<category><![CDATA[boas práticas]]></category>

		<guid isPermaLink="false">http://www.juliogreff.blog.br/?p=21</guid>
		<description><![CDATA[Nos últimos tempos, com a iminente web 2.0, fala-se muito em acessibilidade: motores de busca, deficientes, equipamentos precários ou dispositivos móveis, e uma infinidade de outras coisas. Por incrível que possa parecer, a grande parte dos desenvolvedores torna suas aplicações utilizando Ajax completamente (ou quase completamente) inacessíveis, principalmente para os motores de busca. Como os [...]

<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/hijax-ajax-acessivel/' rel='bookmark' title='Permanent Link: Hijax: Ajax Acessível'>Hijax: Ajax Acessível</a></li>
<li><a href='http://juliogreff.net/ajax-sem-o-x/' rel='bookmark' title='Permanent Link: Ajax sem o X'>Ajax sem o X</a></li>
<li><a href='http://juliogreff.net/ajax-vs-moda-vs-performance/' rel='bookmark' title='Permanent Link: Ajax vs. Moda vs. Performance'>Ajax vs. Moda vs. Performance</a></li>
<li><a href='http://juliogreff.net/a-aplicacao-ajax-perfeita/' rel='bookmark' title='Permanent Link: A Aplicação Ajax Perfeita'>A Aplicação Ajax Perfeita</a></li>
<li><a href='http://juliogreff.net/fila-de-requisicoes-em-ajax/' rel='bookmark' title='Permanent Link: Fila de Requisições em Ajax'>Fila de Requisições em Ajax</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Nos últimos tempos, com a iminente <a href="http://juliogreff.net/e-a-tal-da-web-20/" title="E a tal da Web 2.0?">web 2.0</a>, fala-se muito em acessibilidade: motores de busca, deficientes, equipamentos precários ou dispositivos móveis, e uma infinidade de outras coisas.</p>
<p>Por incrível que possa parecer, a grande parte dos desenvolvedores torna suas aplicações utilizando Ajax completamente (ou quase completamente) inacessíveis, principalmente para os motores de busca.</p>
<p>Como os motores de busca não lêem JavaScript, como eles encontrarão o conteúdo de seu site, se ele for feito completamente em Ajax? E os seus usuários, como irão &#8220;favoritar&#8221; algum artigo que gostaram, se não há links?</p>
<p>Como já disseram, e eu repito, <a href="http://elmicox.blogspot.com/2006/10/ajax-use-com-moderao.html" rel="external friend" title="Ajax: Use com moderação">use ajax com moderação</a>. Mas se você ainda deseja utiliza-lo ao extremo, seja por modismo, necessidade ou mesmo para se mostrar para os amigos, vamos tornar isso tudo acessível.</p>
<h3>Antes de Tudo&#8230;</h3>
<p>Como o Micox já disse em seu artigo, você deve planejar todo seu site como se Ajax não existisse. E eu estendo um pouco: planeje seu site como se nem o JavaScript existisse. Mais acessibilidade ainda? Planeje seu site como se CSS não existisse. Não, não estou louco. É possível, bem difícil, mas é possível. Essa é a grande sacada do desenvolvimento em camadas: primeiro o conteúdo, depois a apresentação e por último o comportamento.</p>
<p>Tá certo que hoje em dia são poucos os navegadores que não suportam CSS, mas nunca se sabe. Já o JavaScript é bem complicado mesmo.</p>
<h3>Links</h3>
<p>Primeiro de tudo: Ajax não veio para reinventar o link. O link é a alma da web. Mas podemos incrementa-lo, lógico. Utilizando o conceito de que você deve pensar em sua página como se JavaScript não existisse, o href não pode ser deixado de lado. Trocar o href de uma página por &#8220;javascript:&#8221; é suicídio. E pior ainda: trocar por &#8220;#alguma-coisa&#8221;. Se o usuário não tiver o JavaScript ativo, adeus pra seu site.</p>
<p>Então, como fazemos? Deixe o href como o link verdadeiro para suas páginas, sem ajax, sem javascript. E aí, no onclick, use:</p>
<pre><code>ajax.request(...); return false;</code></pre>
<p class="post-hint">Com o tempo a gente acaba descobrindo coisas interessantes: onclick não é a melhor maneira para capturar links. Leia: <a href="http://juliogreff.net/hijax-ajax-acessivel/" title="Hijax: Ajax Acessível">Hijax: Ajax Acessível</a></p>
<p>Isso fará com que, depois de clicado, o link apenas ative o JavaScript desejado, retornando false, para que não aconteça mais nada.</p>
<p>E quanto ao nosso querido hash? Sim, há lugar para ele também. Depois de toda a ação do JavaScript, antes de terminar sua função, inclua: <code>top.location.hash = ...</code>. Simples, rápido e indolor.</p>
<h3>Costume dos Usuários</h3>
<p>Convenhamos: a tecnologia chega, mas nem todos estão preparados para ela. A maioria dos usuários está acostumado a esperar o &#8220;loading&#8221; do browser, e não dentro da página. Isso é um problema. Se você esquecer do seu &#8220;Carregando&#8230;&#8221;, o usuário pensará que a página travou, parou de funcionar, deu tilt, já era, babaus, enfim. Uma imagem que se mexe ajuda a dar a impressão que algo vai acontecer.</p>
<p>Outro costume dos usuários é o famoso botão voltar. Já postei aqui no blog <a href="http://juliogreff.net/historico-para-navegacao-via-javascript/" title="Histórico para Navegação via JavaScript">uma solução para histórico</a>. Não esqueça dela, torne-a melhor, se for o caso.</p>
<h3>Várias requisições ao mesmo tempo</h3>
<p>Nem todos sabem, mas os que já sabem se irritam bastate. Quando se clica em um link e, instantaneamente, se muda de idéia e clica em outro, a página vai para o último link clicado. Em ajax isso costuma não acontecer. Só a primeira requisição é carregada (nem sempre, claro). Já tive essa desagradável experiência. Coloque uma &#8220;fila de espera&#8221; para as requisições, para ocorrerem em ordem, ou para requisitar apenas o último clique. Cada uma das soluções se aplica a um caso em particular, não é uma receita específica para todos os tipos de bolo.</p>
<p>Bem, existem vários outros problemas relacionados a acessibilidade, mas já solucionamos os mais &#8220;críticos&#8221; (outras idéias podem ser encontradas <a href="http://juliogreff.net/a-aplicacao-ajax-perfeita/" title="A Aplicação Ajax Perfeita">aqui</a>). Vai do bom senso de cada um tornar seu site compatível e acessível. Contribua para o verdadeiro espírito da Web 2.0!</p>


<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/hijax-ajax-acessivel/' rel='bookmark' title='Permanent Link: Hijax: Ajax Acessível'>Hijax: Ajax Acessível</a></li>
<li><a href='http://juliogreff.net/ajax-sem-o-x/' rel='bookmark' title='Permanent Link: Ajax sem o X'>Ajax sem o X</a></li>
<li><a href='http://juliogreff.net/ajax-vs-moda-vs-performance/' rel='bookmark' title='Permanent Link: Ajax vs. Moda vs. Performance'>Ajax vs. Moda vs. Performance</a></li>
<li><a href='http://juliogreff.net/a-aplicacao-ajax-perfeita/' rel='bookmark' title='Permanent Link: A Aplicação Ajax Perfeita'>A Aplicação Ajax Perfeita</a></li>
<li><a href='http://juliogreff.net/fila-de-requisicoes-em-ajax/' rel='bookmark' title='Permanent Link: Fila de Requisições em Ajax'>Fila de Requisições em Ajax</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://juliogreff.net/ajax-vs-acessibilidade/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

