<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" media="screen" href="/styles/xslt/rss.xslt"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:c9="http://channel9.msdn.com">
<channel>
	<title>Comment Feed for Channel 9 - HTML5 - Aplica&#231;&#245;es Offline</title>
	<atom:link rel="self" type="application/rss+xml" href="http://channel9.msdn.com/posts/HTML5-Aplicaes-Offline/rss"></atom:link>
	<image>
		<url>http://mschnlnine.vo.llnwd.net/d1/Dev/App_Themes/C9/images/feedimage.png</url>
		<title>Channel 9 - HTML5 - Aplica&#231;&#245;es Offline</title>
		<link></link>
	</image>
	<description> APLICA&#199;&#213;ES OFFLINE Caching HTML5 prov&#234; uma maneira de se indicar ao navegador que elementos s&#227;o necess&#225;rios e devem ser postos em cache para que uma aplica&#231;&#227;o funcione offline. O exemplo da documenta&#231;&#227;o oficial &#233; bastante esclarecedor. D&#234; uma olhada na seguinte p&#225;gina: &amp;lt;!DOCTYPE HTML&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;Clock&amp;lt;/title&amp;gt;
&amp;lt;script src=”clock.js”&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;link rel=”stylesheet” href=”clock.css”&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;p&amp;gt;The time is:&amp;lt;outputid=”clock”&amp;gt;&amp;lt;/output&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt; Trata-se de um widget de rel&#243;gio. Para funcionar, este HTML depende dos arquivos &amp;quot;clock.js&amp;quot; e &amp;quot;clock.css&amp;quot;. Para permitir que o usu&#225;rio acesse esta p&#225;gina offline, precisamos escrever um arquivo de manifesto, indicando que URLs devem ser postas em cache. Vamos preparar uma nova vers&#227;o do widget, contendo o manifesto, que &#233; um arquivo com a extens&#227;o .manifest e que deve ser servido com o tipo MIME text/cache-manifest. Em nosso caso, o arquivo vai se chamar clock.manifest e ter&#225; o seguinte conte&#250;do: &amp;nbsp;&amp;nbsp;&amp;nbsp; CACHE MANIFEST  &amp;nbsp;&amp;nbsp;&amp;nbsp; clock1.html  &amp;nbsp;&amp;nbsp;&amp;nbsp; clock.css  &amp;nbsp;&amp;nbsp;&amp;nbsp; clock.js Agora veja o HTML com o arquivo de manifesto linkado: &amp;lt;!DOCTYPE HTML&amp;gt;
&amp;lt;html manifest=”clock.manifest”&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;Clock&amp;lt;/title&amp;gt;
&amp;lt;script src=”clock.js”&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;link rel=”stylesheet” href=”clock.css”&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;p&amp;gt;The time is:&amp;lt;outputid=”clock”&amp;gt;&amp;lt;/output&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt; Note que &#233; recomendado que voc&#234; insira o pr&#243;prio HTML principal na lista de URLs do arquivo de manifesto, embora n&#227;o seja necess&#225;rio. Ao encontrar uma p&#225;gina com um arquivo de manifesto vinculado, o navegador far&#225; cache das URLs listadas no manifesto e da pr&#243;pria p&#225;gina. Note tamb&#233;m que n&#227;o &#233; necess&#225;rio que todas as URLs para cache estejam importadas no documnto atual. O arquivo de manifesto pode contar todas as p&#225;ginas de sua aplica&#231;&#227;o que forem necess&#225;rias para permitir o funcionamento offline, inclusive a navega&#231;&#227;o entre p&#225;ginas. O objeto ApplicationCache O objeto ApplicationCache controla o status e opera&#231;&#245;es de caching da p&#225;gina. Ele pode ser acessado via javascript, assim: &amp;nbsp;&amp;nbsp; window.applicationCache    2 -&amp;nbsp;CHECKING O arquivo de manifesto est&#225; sendo baixado e conferido. 3&amp;nbsp;-&amp;nbsp;DOWNLOADING As URLs vinculadas no manifesto est&#227;o sendo baixadas. 4&amp;nbsp;-&amp;nbsp;UPDATEREADY O cache &#233; antigo, mas ainda n&#227;o foi marcado como obsoleto. 5&amp;nbsp;-&amp;nbsp;OBSOLETE O cache foi marcado como obsoleto e precisa ser atualizado assim que poss&#237;vel. O objeto ApplicationCache tamb&#233;m possui os seguintes eventos, relacionados a sua mudan&#231;a de status: onchecking onerror onnoupdate ondownloading onprogress onupdateready oncached onobsolete Como voc&#234; pode ver, al&#233;m de onerror, temos um evento para cada um dos status da lista acima. Controle de status da aplica&#231;&#227;o No exemplo do rel&#243;gio acima n&#227;o h&#225; formul&#225;rios ou submiss&#245;es Ajax. O agente de usu&#225;rios n&#227;o troca dados com o servidor. Assim &#233; muito f&#225;cil fazer sua aplica&#231;&#227;o rodar offline, mas essa n&#227;o &#233; a realidade da maioria das aplica&#231;&#245;es. Vimos no cap&#237;tulo anterior como fazer armazenamento local de dados. Com isso, voc&#234; pode armazenar os dados que o navegador deveria enviar para o servidor enquanto a aplica&#231;&#227;o estiver offline e, t&#227;o logo ela esteja online, enviar tudo. Para saber se a aplica&#231;&#227;o est&#225; online, basta acessar a propriedade onLine do objeto window.navigator: function salva(dados){
if(window.navigator.onLine){
enviaAjax(dados)
}else{
salvaLocal(dados)
}
} E para disparar o envio quando a aplica&#231;&#227;o estiver online e avisar o usu&#225;rio quando ela estiver offline, usamos os eventos ononline e onoffline do objeto window: window.ononline=function(){
enviaAjax(obtemLocal())
document.getElementById(‘warning’).innerHTML=’’
}
window.onoffline=function(){
document.getElementById(‘warning’).innerHTML=’Aplica&#231;&#227;o 
offline.’
} &amp;nbsp; Este treinamento faz parte do Microsoft Virtual Academy: http://www.microsoftvirtualacademy.com </description>
	<link></link>
	<language>en</language>
	<pubDate>Tue, 21 May 2013 23:22:30 GMT</pubDate>
	<lastBuildDate>Tue, 21 May 2013 23:22:30 GMT</lastBuildDate>
	<generator>Rev9</generator>
</channel>
</rss>