<?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>Diego Pessoa &#187; Web Accessibility</title>
	<atom:link href="http://www.diegopessoa.com/lang/pt-br/tag/web-accessibility/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.diegopessoa.com</link>
	<description></description>
	<lastBuildDate>Thu, 07 Jan 2010 04:22:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Resolvendo o problema do botão voltar em aplicações Ajax</title>
		<link>http://www.diegopessoa.com/lang/pt-br/2009/03/09/solving-the-problem-of-back-button-in-ajax-applications</link>
		<comments>http://www.diegopessoa.com/lang/pt-br/2009/03/09/solving-the-problem-of-back-button-in-ajax-applications#comments</comments>
		<pubDate>Tue, 10 Mar 2009 00:18:27 +0000</pubDate>
		<dc:creator>Diego Pessoa</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Jquery]]></category>
		<category><![CDATA[Web Standards]]></category>
		<category><![CDATA[Web developing]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Web Accessibility]]></category>

		<guid isPermaLink="false">http://www.diegopessoa.com/?p=102</guid>
		<description><![CDATA[Quem aqui sempre sonhou em fazer aplicações em Ajax na qual o usuário pode navegar livremente utilizando o botão voltar e avançar, e além disso, pode adicionar seções específicas ao seu bookmark. Na teoria, isto não seria possível, visto que, o &#8220;Ajax&#8221; em si, utilizando pela maioria, é utilizado para recarregar apenas alguns blocos da [...]]]></description>
			<content:encoded><![CDATA[<p><span lang="pt-br">Quem aqui sempre sonhou em fazer aplicações em Ajax na qual o usuário pode navegar livremente utilizando o botão voltar e avançar, e além disso, pode adicionar seções específicas ao seu bookmark. Na teoria, isto não seria possível, visto que, o &#8220;Ajax&#8221; em si, utilizando pela maioria, é utilizado para recarregar apenas alguns blocos da página, mantendo aquela página ativa, e consequentemente, impossibilitando o uso do botão voltar ou de bookmarks, do contrário teríamos a boa e velha requisição da página inteira.</span></p>
<p><span lang="pt-br">Mas então, como o GMAIL funciona? Ele é totalmente em ajax e mesmo assim, você consegue navegar utilizando o botão voltar, e se colocar um link como http://mail.google.com/mail/#compose na barra de endereços, ele irá abrir a tela de composição de e-mails normalmente. O grande segredo está nas #âncoras.<br />
Navegação Orientada a Âncoras</span></p>
<p><span lang="pt-br">Uma coisa muito interessante das chamadas Âncoras, é que elas permitem que você use o botão voltar e avançar, por exemplo, sem gerar nenhuma requisição e sem precisar sair daquela página, então, o que poderíamos fazer?</span></p>
<p><span lang="pt-br">A primeira coisa seria criar um arquivo Javascript que irá ficar toda hora verificando se alguma âncora está ativa, caso esteja, ele envia a requisição ajax chamando a seção específica, baseada no nome da âncora, que será carregada dentro do bloco principal, simples não?</span></p>
<p><span lang="pt-br">Como já é de praxe para Javascript hoje em dia, usaremos Jquery, portanto, lembrem-se de incluir o arquivo da biblioteca na sua aplicação.</span></p>
<p><span lang="pt-br">Teríamos então, um arquivo de nome &#8220;core.js&#8221;, assim:</span></p>
<div lang="pt-br">
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* Ao carregar a página, o temporizador é iniciando para checar se há uma nova âncora ativa a cada 300ms</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">*/</span></div>
</li>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">ready</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">setInterval<span class="br0">&#40;</span><span class="st0">&#34;checkAnchor()&#34;</span>, <span class="nu0">300</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> currentAnchor = <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1">&#160;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">* Metodo que checa se há alguma mudança de âncora, se houver, envia a requisição ajax</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> checkAnchor<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&#160;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span><span class="br0">&#40;</span>currentAnchor != document.<span class="me1">location</span>.<span class="me1">hash</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">currentAnchor = document.<span class="me1">location</span>.<span class="me1">hash</span>;</div>
</li>
<li class="li1">
<div class="de1">&#160;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* Se não há nenhuma âncora ativa, a seção default é carregada</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">*/</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">if</span><span class="br0">&#40;</span>!currentAnchor<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">query = <span class="st0">&#34;section=home&#34;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">* Cria a string de resultado. Convertendo a url: URL/#fotos&#38;amp;amp;id=2 em URL/?section=fotos&#38;amp;amp;id=2</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* */</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> splits = currentAnchor.<span class="me1">substring</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span>.<span class="me1">split</span><span class="br0">&#40;</span><span class="st0">&#8216;&#38;amp;amp;&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> section = splits<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">delete</span> splits<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">var</span> params = splits.<span class="me1">join</span><span class="br0">&#40;</span><span class="st0">&#8216;&#38;amp;amp;&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> query = <span class="st0">&#34;section=&#34;</span> + section + params;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">* Envia a requisição</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">*/</span></div>
</li>
<li class="li1">
<div class="de1">$.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&#34;callbacks.php&#34;</span>,query, <span class="kw2">function</span><span class="br0">&#40;</span>data<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span><span class="st0">&#34;#bloco_principal&#34;</span><span class="br0">&#41;</span>.<span class="me1">html</span><span class="br0">&#40;</span>data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&#160;</div>
</li>
</ol>
</div>
</div>
<p><span lang="pt-br">Ok, o conteúdo será carregando no eleme nto de ID &#8220;bloco_principal&#8221; através do resultado das requisições Ajax que estão sendo enviadas para a página &#8220;callbacks.php&#8221; em formato de querystring GET.<br />
Para pegarmos, teríamos algo desse tipo:</span></p>
<div lang="pt-br">
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$section</span> = <a href="http://www.php.net/addslashes"><span class="kw3">addslashes</span></a><span class="br0">&#40;</span><a href="http://www.php.net/strip_tags"><span class="kw3">strip_tags</span></a><span class="br0">&#40;</span><span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&#8217;section&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$pagina</span> = <span class="st0">&#34;paginas/&#34;</span>.<span class="re0">$section</span>.<span class="st0">&#34;.php&#34;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/file_exists"><span class="kw3">file_exists</span></a><span class="br0">&#40;</span><span class="re0">$pagina</span><span class="br0">&#41;</span><span class="br0">&#41;</span>  <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">include</span><span class="br0">&#40;</span><span class="re0">$pagina</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
</ol>
</div></div>
<p><span lang="pt-br">Com isso, bastaria uma pasta &#8220;paginas&#8221; contendo as páginas com os mesmos nomes das âncoras.</span></p>
<p><span lang="pt-br">E para chamar cada seção, bastaria uma simples página html com links do tipo:</span></p>
<p><span lang="pt-br">http://meusite.com/#fotos</span></p>
<p><span lang="pt-br">que seria detectado pelo método &#8220;checkAnchor()&#8221; do javascript, que chamará uma requisição php carregando a página de nome fotos.php dentro do diretorio paginas, que será exibida dentro do bloco #bloco_principal que está contido na mesma página do link clicado, e o melhor de tudo, você pode voltar, avançar e adicionar as seções que quiser aos favoritos, à vontade.</span></p>
<p><span lang="pt-br">Para ilustrar melhor o exemplo, fiz uma cópia descarada (haha), do site do evento php-pb.net, com a única diferença de possuir navegação em ajax através de âncoras (o original possui navegação normal). Acessem pelo link: <a href="http://www.diegopessoa.com/php-pb-ajax" target="_blank">http://www.diegopessoa.com/php-pb-ajax</a></span></p>
<p><span lang="pt-br">Se quiserem baixar o exemplo funcionando, <a href="http://diegopessoa.com/php-pb-ajax/%5bdiegopessoa.com%5dAjaxBack.zip" target="_blank">cliquem aqui</a>!</span></p>
















]]></content:encoded>
			<wfw:commentRss>http://www.diegopessoa.com/lang/pt-br/2009/03/09/solving-the-problem-of-back-button-in-ajax-applications/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>WCAG! WCAG!</title>
		<link>http://www.diegopessoa.com/lang/pt-br/2009/02/02/wcag-wcag</link>
		<comments>http://www.diegopessoa.com/lang/pt-br/2009/02/02/wcag-wcag#comments</comments>
		<pubDate>Mon, 02 Feb 2009 03:47:30 +0000</pubDate>
		<dc:creator>Diego Pessoa</dc:creator>
				<category><![CDATA[WCAG 2.0]]></category>
		<category><![CDATA[Web Accessibility]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://www.diegopessoa.com/?p=93</guid>
		<description><![CDATA[Neste começo de 2009 a W3C anunciou novos padrões que ajudarão os desenvolvedores web a criar sites que atendem de maneira mais adequada às necessidades dos portadores de deficiências e usuários idosos. Trata-se da segunda versão do WCAG (Web Content Accessibility Guidelines) ou (Diretrizes  de Acessibilidade a Conteúdo Web, este novo padrão produzido pela [...]]]></description>
			<content:encoded><![CDATA[<p><span lang="pt-br">Neste começo de 2009 a <a title="Clique para acessar o site da w3c (World Wide Web Consortium)" href="http://www.w3.org" target="_blank"><acronym title="World Wide Web Consortium">W3C</acronym></a> anunciou novos padrões que ajudarão os desenvolvedores web a criar sites que atendem de maneira mais adequada às necessidades dos portadores de deficiências e usuários idosos. Trata-se da segunda versão do WCAG (Web Content Accessibility Guidelines) ou (Diretrizes  de Acessibilidade a Conteúdo Web, este novo padrão produzido pela Iniciativa de Acessibilidade Web (WAI) da W3C atenderá uma largo faixa de conteúdos (tais como texto, imagens, áudio e vídeo) e aplicações web, permitindo melhores testes de verificação e ainda proverá mais flexibilidade e maior potencial de inovação para desenvolvedores web. O WCAG 2.0 é mais fácil de entender e usar juntamente como o material educacional e técnico disponível.</span></p>
<p><span lang="pt-br">O WCAG 2.0 ataca as dificuldades de acesso a web experimentadas por pessoas com limitações visuais, auditivas, físicas, cognitivas e neurológicas e por usuários idosos com necessidades de acessibilidade a web. Seguindo quatro princípios:</span></p>
<ul>
<li><span lang="pt-br">Perceptível (por exemplo, fornecer textos alternativos a imagens, modo “caption” para áudio, apresentar conteúdo adaptável a diferentes maneiras de ser apresentado e usar contraste de cores);</span></li>
<li><span lang="pt-br">Operável (por exemplo, prover acesso às funcionalidades pelo teclado, contraste de cores, oferecer tempo adequado para ler e entrar com dados, evitar imagens que causem convulsões e melhor navegabilidade);</span></li>
<li><span lang="pt-br">Compreensível (por exemplo, prover conteúdos       legíveis e previsíveis e ajudar o usuário a evitar e corrigir erros); e</span></li>
<li><span lang="pt-br">Robusto (por exemplo, prover compatibilidade       com tecnologias assistidas)</span></li>
</ul>
<p><span lang="pt-br">[texto adaptado do site oficial da W3C]</span></p>
<p><span lang="pt-br">Para quem já quer começar a estudar as novas diretrizes, <a title="Clique para acessar o guia de referência do WCAG 2" href="http://www.w3.org/TR/WCAG20/" target="_blank">acesse o guia de referência</a>.</span></p>
<p><span lang="pt-br">Para animar vocês, vejam o vídeo com o tema da WCAG 2 (lembrem-se de ativar o recurso de legendas do player do youtube):</span></p>








<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/gtuna2AWvqk&#38;hl=pt-br&#38;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/gtuna2AWvqk&#38;hl=pt-br&#38;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.diegopessoa.com/lang/pt-br/2009/02/02/wcag-wcag/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
