Acesse casos de uso incríveis com a API Picture-in-Picture de documentos

Publicado em: 4 de março de 2025

A API Picture-in-Picture de documentos (API Document PiP) permite que aplicativos da Web abram uma janela flutuante sempre no topo (uma janela picture-in-picture) que pode mostrar qualquer conteúdo HTML arbitrário.

Essa API é criada com base na API Picture-in-Picture para <video>, que permite continuar consumindo vídeo em uma janela PiP.

Como a API Document PiP pode mostrar qualquer conteúdo HTML arbitrário, você pode usá-la para desbloquear novos casos de uso interessantes.

Suporte a navegadores e melhoria progressiva

Browser Support

  • Chrome: 116.
  • Edge: 116.
  • Firefox Technology Preview: supported.
  • Safari: not supported.

Source

No momento da redação deste artigo, a API Picture-in-Picture de documentos tem disponibilidade limitada.

No entanto, isso não impede que você o use com aprimoramento progressivo ou degradação suave.

Ao planejar seu caso de uso, trate-o como um aprimoramento progressivo, e não como um recurso padrão. Neste artigo, você vai conferir um exemplo de degradação gradual.

Como melhorar a experiência do usuário do estudante com a API Picture-in-Picture de documentos

LearnHTMLCSS.online (em inglês) é uma plataforma de aprendizado interativa que ensina HTML e CSS semânticos e acessíveis. Ele oferece um editor de texto interativo e uma janela de visualização do navegador.

O screencast a seguir mostra o layout do app. A tela é dividida em duas colunas. A primeira coluna contém o editor de código. A segunda coluna contém um layout com guias. Por padrão, o usuário pode ver as instruções do desafio e clicar na guia Navegador para conferir uma prévia dinâmica.

Como estudante, talvez você queira maximizar a janela de visualização do navegador. Essa é uma ótima oportunidade para adicionar suporte à API Picture-in-Picture de documentos.

Para implementar isso, comece verificando o suporte do navegador:

const isPipSupported = "documentPictureInPicture" in window;

Agora você pode usar essa variável para encapsular qualquer chamada documentPictureInPicture ou para retornar antecipadamente de uma função que depende do Picture-in-Picture de documentos. O código a seguir verifica se há suporte para o PiP de documentos e abre uma janela desse recurso.

async function initDocumentPip() {
  if (!isPipSupported) {
    return false;
  }

  const pipWindow = await documentPictureInPicture.requestWindow({
    width: window.innerWidth,
    height: window.innerHeight,
  });
}

Dependendo do caso de uso, é possível especificar qualquer largura e altura para a janela. Você pode tentar corresponder a um elemento específico, ao documento atual ou até mesmo fornecer valores fixos.

Até agora, você tem um documento vazio. Agora, você precisa preenchê-lo com conteúdo.

// htmlCode is the HTML code of the challenge
pipWindow.document.documentElement.innerHTML = htmlCode;

Para desafios com código CSS, também é necessário sincronizar o CSS.

Pronto! Agora, há um botão de maximizar que abre em uma janela PiP separada.Além de maximizar a guia de visualização do navegador, você também pode movê-la para uma tela separada se tiver um monitor externo ou até mesmo reorganizar o web app principal e a guia de visualização do navegador em um layout de coluna.

Fallback

Lembre-se de que essa API tem disponibilidade limitada. Em navegadores e dispositivos sem suporte para essa API, você precisa fornecer um comportamento de substituição (degradação gradual).

Em vez de fazer com que o botão de maximizar puxe toda a guia de visualização do navegador, podemos fazer com que ele ocupe todo o espaço restante do web app atual.

Teste esse comportamento em diferentes navegadores: https://learnhtmlcss.online/app.html?id=2096

Não se esqueça de prestar atenção aos pequenos detalhes nas dicas. Quando isPipSupported é true, a dica do botão de maximizar/minimizar alterna entre Entrar no picture-in-picture e Sair do picture-in-picture. Por outro lado, quando isPipSupported é false, o comportamento de substituição é descrito com Maximizar e Minimizar.


Como você pode ver, a API Picture-in-Picture de documentos pode desbloquear novos casos de uso interessantes para seu web app quando combinada com melhoria progressiva ou degradação gradual.

Não deixe que o suporte limitado do navegador limite você e não se esqueça de ter um caso de uso de substituição adequado.

Confira a documentação do Picture-in-Picture de documentos para conhecer vários exemplos e casos de uso dessa API.