Gerenciamento de Janelas

PWA
Tempo de leitura: 4 minutos

O Gerenciamento de Janelas em Progressive Web Apps (PWAs) é crucial para que o aplicativo instalado (o modo standalone) se integre e se comporte de forma esperada no sistema operacional (SO). Embora o controle total de janelas seja tipicamente restrito a aplicações nativas, as APIs web oferecem um conjunto crescente de funcionalidades para manipular o contêiner visual e melhorar a UX.

1. 📏 Informações Básicas da Janela e Tela

O objeto window (para a viewport do PWA) e o objeto screen (para o monitor físico) fornecem informações vitais para o layout e adaptação do aplicativo.

ObjetoPropriedadeDescrição
windowinnerWidth / innerHeightDimensões da área de conteúdo visível do PWA (viewport).
screenwidth / heightResolução total do monitor ou tela do dispositivo.
windowdevicePixelRatioRelação entre pixels físicos e pixels CSS (essencial para renderização em telas Retina/HDPI).
documenttitleO texto exibido na barra de título da janela do PWA (no modo Desktop).

JavaScript

console.log(`Resolução da tela: ${screen.width}x${screen.height}`);
console.log(`Viewport: ${window.innerWidth}x${window.innerHeight}`);
document.title = 'Meu PWA: Nova Tarefa';

2. 🖱️ Movimentação e Redimensionamento (Limitações)

Em PWAs instaladas em Desktop (Chrome/Edge), o navegador gerencia o redimensionamento e a movimentação da janela. O JavaScript da PWA tem controle limitado sobre essas ações por razões de segurança.

  • Mover/Redimensionar (Suporte Limitado): O método window.open() pode receber parâmetros de altura (height) e largura (width), mas isso geralmente abre uma nova aba ou uma nova janela pop-up (não a janela do PWA em si).
  • APIs Nativas: Para controle total do contêiner da janela, como no Electron, a PWA requer empacotamento em uma solução que faça a ponte entre a API web e a API nativa do SO.

3. 📑 Simulando Modo com Guias (Tabs)

Como PWAs instaladas não oferecem guias de navegação nativas como um navegador completo, a funcionalidade de múltiplas visualizações ou páginas deve ser simulada dentro da própria interface do aplicativo.

  • Abordagem: Utilize frameworks de componentes (como Materialize, Bootstrap, React) para implementar componentes de abas ou carrossel de conteúdo.
  • Mecanismo: Ao clicar em uma aba, o JavaScript manipula o DOM para mostrar/ocultar o conteúdo correspondente, mantendo a navegação rápida e dentro de uma única página (SPA – Single Page Application).

HTML

<ul class="tabs">
  <li class="tab"><a href="#dashboard">Dashboard</a></li>
  <li class="tab"><a href="#settings">Configurações</a></li> 
</ul>

<div id="dashboard">Conteúdo do Dashboard</div>
<div id="settings">Conteúdo das Configurações</div>

4. 🔒 Wake Lock de Tela (Screen Wake Lock API)

Esta API permite que o PWA solicite ao sistema operacional que impeça a tela de apagar ou o dispositivo de entrar em modo de suspensão por inatividade. É essencial para tarefas que exigem que a tela permaneça acesa (ex: mapas, cronômetros, exibição de QR codes).

Implementação

O lock deve ser solicitado e, crucialmente, liberado quando não for mais necessário, para preservar a bateria do dispositivo.

JavaScript

let wakeLock = null;

const requestWakeLock = async () => {
  try {
    // Solicita o wake lock de tela
    wakeLock = await navigator.wakeLock.request('screen');
    console.log('Wake Lock ativo.');
    
    // O lock é liberado automaticamente quando a aba é minimizada
    // ou o dispositivo é bloqueado.

    // Para liberar manualmente
    // wakeLock.release(); 
  } catch (err) {
    console.error(`Erro no Wake Lock: ${err.name}, ${err.message}`);
  }
};

// Ativa o lock quando uma funcionalidade crítica for iniciada
requestWakeLock();

Nota: O wake lock é uma API sensível ao contexto. Se o usuário mudar de aba ou a PWA for minimizada, o sistema operacional pode liberar o lock automaticamente. Você deve re-solicitá-lo se a PWA for reativada.

5. 🗺️ Navegação Externa

  • Navegação Interna: Para links que pertencem ao scope do PWA, use o Histórico de API ou routing para evitar recarregar a página.
  • Navegação Externa: Para URLs que não pertencem ao scope do PWA (ex: links para outro site), use o window.location.href ou window.open(). O navegador abrirá uma nova aba ou janela normal fora do contêiner do seu PWA.

JavaScript

// Navega para fora do escopo do PWA
window.location.href = 'https://www.site-externo.com';

✅ Conclusão Gerenciamento de Janelas

Gerenciamento de Janelas: O controle da janela em PWAs é um conjunto de técnicas que inclui o uso do document.title e das propriedades window para adaptar o layout, a simulação de guias com frameworks de interface, e a integração com APIs de sistema como o Screen Wake Lock. Ao adotar essas práticas, o PWA oferece uma experiência instalada que maximiza a imersão e minimiza as distrações, aproximando-se da fluidez de um aplicativo nativo.

Toda jornada tem um início, e o início para se tornar um desenvolvedor web é dominar as seguintes tecnologias, que você encontra aqui mesmo:

HTML
HTML
CSS
CSS
Javascript
JavaScript

E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime
Author: Thiago Rossi
Com mais de 20 anos de jornada na tecnologia, minha trajetória evoluiu do ensino técnico à arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de soluções de Inteligência Artificial nativa e análise de dados públicos, utilizando o ecossistema PHP para transformar dados brutos em transparência e eficiência. Como autor e desenvolvedor, acredito na democratização do conhecimento. Essa visão resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura até os bastidores da indústria de Jogos e IA. No universo de Game Design, sou autor do livro "GDD – O Guia Definitivo" e documento ativamente meus processos através de DevLogs, unindo rigor técnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso é conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.