Eventos on-line e off-line

  • Revision slug: Online_and_offline_events
  • Revision title: Eventos on-line e off-line
  • Revision id: 292959
  • Criado:
  • Criador: jpalharini
  • É a revisão atual? Não
  • Comentar Moved From Eventos_on-line_off-line to Online_and_offline_events

Conteúdo da revisão

Alguns navegadores utilizam Online/Offline events relacionados à WHATWG Web Applications 1.0 specification.

Introdução

Para criar um bom aplicativo off-line, primeiramente é necessário que você saiba quando o aplicativo está off-line. Consequentemente, você também precisará saber quando seu aplicativo retorna ao estado on-line novamente, ou seja, os eventos são:

  1. Você precisa saber quando o usuário está on-line novamente, assim você pode sincronizar novamente com o servidor.
  2. Você precisa saber quando o usuário está off-line, então você deverá agendar os acessos ao servidor para mais tarde.

Este é o processo que os eventos on-line/off-line ajudam a facilitar.

Seu aplicativo também poderá precisar estabelecer que certos documentos deverão ser mantidos em um cache off-line. Você pode saber mais sobre isso no artigo Offline resources in Firefox.

API

navigator.onLine é uma propriedade que mantém valores true/false (true para on-line, false para off-line). Esta propriedade é atualizada quando o usuário entra em "Modo Off-line" clicando no item de menu correspondente (Arquivo -> Modo Off-line).

Essa propriedade também deverá ser atualizada toda vez que o navegador perde a conexão com a Internet. De acordo com a especificação:

A propriedade navigator.onLine deve retornar false se o usuário clicar num link ou se um aplicativo tentar contatar uma página remota e não estiver conectado à Internet ou se o navegador souber que a tentativa irá falhar por qualquer motivo...

O Firefox 2 atualiza esta propriedade quando se entra em Modo Off-line ou sai do mesmo e também quando a conexão com a Internet é perdida ou reestabelecida no Windows e no Linux.

Essa propriedade existiu em versões mais antigas do Firefox e do Internet Explorer (a especificação acima foi baseada nestas implementações anteriores), então você pode começar a utilizá-la imediatamente. A auto-detecção de estado de rede foi implementada no Firefox 2.

Eventos "on-line" e "off-line"

O Firefox 3 implementou dois novos eventos: "on-line" e "off-line". Estes dois eventos são chamados na tag <body> de cada página quando o navegador muda entre os modos on e off-line. Também, esses eventos são propagados a partir do document.body, para document, terminando em window. Ambos eventos não podem ser interrompidos (você não pode prevenir que o usuário fique on-line ou off-line).

Você pode resgistrar listeners para esses eventos em caminhos conhecidos:

  • usando addEventListener em window, document, ou document.body
  • configurando propriedades .ononline ou .onoffline em document ou document.body para um objeto Function em JavaScript. (Obs.: window.ononline ou window.onoffline não funcionarão por questões de compatibilidade.)
  • especificando atributos ononline="..." or onoffline="..."  na tag <body> do HTML.

Example

a simple test case que você pode rodar para ver como esses eventos funcionam. XXX Quando os testes para isso forem criados, redirecione para eles e atualize este exemplo -nickolay

 <!doctype html>
 <html>
 <head>
   <script>
     function updateOnlineStatus(msg) {
       var status = document.getElementById("status");
       var condition = navigator.onLine ? "ONLINE" : "OFFLINE";
       status.setAttribute("class", condition);
       var state = document.getElementById("state");
       state.innerHTML = condition;
       var log = document.getElementById("log");
       log.appendChild(document.createTextNode("Event: " + msg + "; status=" + condition + "\n"));
     }
     function loaded() {
       updateOnlineStatus("load");
       document.body.addEventListener("offline", function () {
         updateOnlineStatus("offline")
       }, false);
       document.body.addEventListener("online", function () {
         updateOnlineStatus("online")
       }, false);
     }
   </script>
   <style>...</style>
 </head>
 <body onload="loaded()">
   <div id="status"><p id="state"></p></div>
   <div id="log"></div>
 </body>
 </html>

Notas

Se a API não estiver implementada no navegador, você pode usar outros sinais para detectar quando se está off-line, inclusive receber AppCache error events e responses from XMLHttpRequest.

Referências

{{ HTML5ArticleTOC() }}

{{ languages( { "es": "es/Eventos_online_y_offline", "fr": "fr/\u00c9v\u00e8nements_online_et_offline", "ja": "ja/Online_and_offline_events", "pl": "pl/Zdarzenia_online_i_offline", "pt": "pt/Eventos_online_e_offline" } ) }}

Fonte da revisão

<p>Alguns navegadores utilizam <a class="external" href="http://www.whatwg.org/specs/web-apps/current-work/#offline">Online/Offline events</a> relacionados à <a class="external" href="http://www.whatwg.org/specs/web-apps/current-work/">WHATWG Web Applications 1.0 specification</a>.</p>
<h3 id="Overview" name="Overview">Introdução</h3>
<p>Para criar um bom aplicativo off-line, primeiramente é necessário que você saiba quando o aplicativo está off-line. Consequentemente, você também precisará saber quando seu aplicativo retorna ao estado on-line novamente, ou seja, os eventos são:</p>
<ol>
  <li>Você precisa saber quando o usuário está on-line novamente, assim você pode sincronizar novamente com o servidor.</li>
  <li>Você precisa saber quando o usuário está off-line, então você deverá agendar os acessos ao servidor para mais tarde.</li>
</ol>
<p>Este é o processo que os eventos on-line/off-line ajudam a facilitar.</p>
<p>Seu aplicativo também poderá precisar estabelecer que certos documentos deverão ser mantidos em um cache off-line. Você pode saber mais sobre isso no artigo <a href="/en/Offline_resources_in_Firefox" title="en/Offline_resources_in_Firefox">Offline resources in Firefox</a>.</p>
<h3 id="API" name="API">API</h3>
<h4 id="navigator.onLine" name="navigator.onLine"><code>navigator.onLine</code></h4>
<p><code><a href="/en/DOM/window.navigator.onLine" title="en/DOM/window.navigator.onLine">navigator.onLine</a></code> é uma propriedade que mantém valores <code>true</code>/<code>false</code> (<code>true</code> para on-line, <code>false</code> para off-line). Esta propriedade é atualizada quando o usuário entra em "Modo Off-line" clicando no item de menu correspondente (Arquivo -&gt; Modo Off-line).</p>
<p>Essa propriedade também deverá ser atualizada toda vez que o navegador perde a conexão com a Internet. De acordo com a especificação:</p>
<blockquote cite="http://www.whatwg.org/specs/web-apps/current-work/#offline">
  A propriedade <code>navigator.onLine</code> deve retornar false se o usuário clicar num link ou se um aplicativo tentar contatar uma página remota e não estiver conectado à Internet ou se o navegador souber que a tentativa irá falhar por qualquer motivo...</blockquote>
<p>O Firefox 2 atualiza esta propriedade quando se entra em Modo Off-line ou sai do mesmo e também quando a conexão com a Internet é perdida ou reestabelecida no Windows e no Linux.</p>
<p>Essa propriedade existiu em versões mais antigas do Firefox e do Internet Explorer (a especificação acima foi baseada nestas implementações anteriores), então você pode começar a utilizá-la imediatamente. A auto-detecção de estado de rede foi implementada no Firefox 2.</p>
<h4 id=".22online.22_and_.22offline.22_events" name=".22online.22_and_.22offline.22_events">Eventos "<code>on-line</code>" e "<code>off-line</code>"</h4>
<p>O <a href="/en/Firefox_3_for_developers" title="en/Firefox_3_for_developers">Firefox 3</a> implementou dois novos eventos: "<code>on-line</code>" e "<code>off-line</code>". Estes dois eventos são chamados na tag <code>&lt;body&gt;</code> de cada página quando o navegador muda entre os modos on e off-line. Também, esses eventos são propagados a partir do <code>document.body</code>, para <code>document</code>, terminando em <code>window</code>. Ambos eventos não podem ser interrompidos (você não pode prevenir que o usuário fique on-line ou off-line).</p>
<p>Você pode resgistrar <em>listeners</em> para esses eventos em caminhos conhecidos:</p>
<ul>
  <li>usando <code><a href="/en/DOM/element.addEventListener" title="en/DOM/element.addEventListener">addEventListener</a></code> em <code>window</code>, <code>document</code>, ou <code>document.body</code></li>
  <li>configurando propriedades <code>.ononline</code> ou <code>.onoffline</code> em <code>document</code> ou <code>document.body</code> para um objeto <code>Function</code> em JavaScript. (<strong>Obs.:</strong> <code>window.ononline</code> ou <code>window.onoffline</code> não funcionarão por questões de compatibilidade.)</li>
  <li>especificando atributos <code>ononline="..."</code> or <code>onoffline="..."</code>&nbsp; na tag <code>&lt;body&gt;</code> do HTML.</li>
</ul>
<h3 id="Example" name="Example">Example</h3>
<p>Há <a class="link-https" href="https://bugzilla.mozilla.org/attachment.cgi?id=220609">a simple test case</a> que você pode rodar para ver como esses eventos funcionam. XXX Quando os testes para isso forem criados, redirecione para eles e atualize este exemplo -nickolay</p>
<pre class="brush: html">
 &lt;!doctype html&gt;
 &lt;html&gt;
 &lt;head&gt;
   &lt;script&gt;
     function updateOnlineStatus(msg) {
       var status = document.getElementById("status");
       var condition = navigator.onLine&nbsp;? "ONLINE"&nbsp;: "OFFLINE";
       status.setAttribute("class", condition);
       var state = document.getElementById("state");
       state.innerHTML = condition;
       var log = document.getElementById("log");
       log.appendChild(document.createTextNode("Event: " + msg + "; status=" + condition + "\n"));
     }
     function loaded() {
       updateOnlineStatus("load");
       document.body.addEventListener("offline", function () {
         updateOnlineStatus("offline")
       }, false);
       document.body.addEventListener("online", function () {
         updateOnlineStatus("online")
       }, false);
     }
   &lt;/script&gt;
   &lt;style&gt;...&lt;/style&gt;
 &lt;/head&gt;
 &lt;body onload="loaded()"&gt;
   &lt;div id="status"&gt;&lt;p id="state"&gt;&lt;/p&gt;&lt;/div&gt;
   &lt;div id="log"&gt;&lt;/div&gt;
 &lt;/body&gt;
 &lt;/html&gt;
</pre>
<h3 id="References" name="References">Notas</h3>
<p>Se a API não estiver implementada no navegador, você pode usar outros sinais para detectar quando se está off-line, inclusive receber <a class="external" href="http://www.html5rocks.com/en/mobile/workingoffthegrid.html#toc-appcache">AppCache error events</a> e <a class="external" href="http://www.html5rocks.com/en/mobile/workingoffthegrid.html#toc-xml-http-request">responses from XMLHttpRequest</a>.</p>
<h3 id="References" name="References">Referências</h3>
<ul>
  <li><a class="external" href="http://www.whatwg.org/specs/web-apps/current-work/#offline">'Online/Offline events' section from the WHATWG Web Applications 1.0 Specification</a></li>
  <li><a class="link-https" href="https://bugzilla.mozilla.org/show_bug.cgi?id=336359">The bug tracking online/offline events implementation in Firefox</a> and a <a class="link-https" href="https://bugzilla.mozilla.org/show_bug.cgi?id=336682">follow-up</a></li>
  <li><a class="link-https" href="https://bugzilla.mozilla.org/attachment.cgi?id=220609">A simple test case</a></li>
  <li><a class="external" href="http://ejohn.org/blog/offline-events/">An explanation of Online/Offline events</a></li>
  <li><a class="external" href="http://hacks.mozilla.org/2010/01/offline-web-applications/" title="http://hacks.mozilla.org/2010/01/offline-web-applications/">offline web applications</a> em hacks.mozilla.org - mostra um aplicativo off-line e explica como funciona.</li>
</ul>
<p>{{ HTML5ArticleTOC() }}</p>
<p>{{ languages( { "es": "es/Eventos_online_y_offline", "fr": "fr/\u00c9v\u00e8nements_online_et_offline", "ja": "ja/Online_and_offline_events", "pl": "pl/Zdarzenia_online_i_offline", "pt": "pt/Eventos_online_e_offline" } ) }}</p>
Reverter para esta revisão