Pré-visualizações de PDF em linha reiniciam na página 1 ao rolar um tópico

Resumo

As Pré-visualizações de PDF Incorporadas consistentemente redefinem sua posição de rolagem (de volta para a página 1) ao rolar por um tópico longo. Isso ocorre porque o incorporamento (embed) do PDF está sendo destruído e reinserido quando o post sai da visualização, provavelmente devido à reciclagem/virtualização do fluxo de posts do Discourse.

Isso afeta todos os navegadores, todos os PDFs e ocorre mesmo com todos os plugins e temas desativados.

Passos para Reprodução

  1. Crie um tópico com um anexo PDF.
  2. Certifique-se de que o componente Pré-visualizações de PDF Incorporadas esteja ativo.
  3. Role para baixo no tópico até que o post contendo o PDF saia da área de visualização (viewport).
  4. Role de volta para a mesma pré-visualização de PDF.
  5. Resultado:
    • O PDF é recarregado do início.
    • A posição de rolagem da pré-visualização é perdida.
    • O PDF é renderizado novamente como se tivesse sido carregado recentemente.

Nenhuma solicitação de rede para o PDF ocorre, o que indica que o nó DOM foi removido localmente e recriado.

Comportamento Esperado

  • A pré-visualização do PDF deve manter sua posição de rolagem e não deve recarregar simplesmente devido à rolagem do tópico.
  • Outros conteúdos incorporados (imagens, vídeos, Oneboxes) não redefinem o estado ao rolar; as pré-visualizações de PDF devem se comportar de forma consistente.

Comportamento Atual

  • Assim que o post sai do alcance visível, o Discourse descarrega o nó DOM.
  • Quando o post volta a ficar visível, o embed é reconstruído.
  • Isso força o renderizador de PDF nativo do navegador a começar novamente a partir da página 1.
  • Isso ocorre toda vez que o post sai da área de visualização (para cima ou para baixo).

Ambiente

  • Ocorre em todos os navegadores testados: Chrome, Firefox, Safari, Edge
  • Ocorre com todos os plugins desativados (Modo Seguro)
  • Ocorre com todos os componentes de tema desativados
  • Ocorre com múltiplos arquivos PDF de diferentes tamanhos e formatos
  • Ocorre na branch mais recente do Discourse (tests-passed) (na data da postagem)

Observações Técnicas

O Discourse parece estar desmontando componentes de posts fora da tela como parte da virtualização de fluxo. Como a pré-visualização do PDF usa um simples \<embed\> / \<iframe\>, ela não possui mecanismo de persistência, então é completamente redefinida sempre que:

  • willDestroyElement() é acionado
  • o contêiner do post é renderizado novamente
  • o nó DOM é recriado na reentrada na área de visualização

Isso é exclusivo de PDFs porque os visualizadores de PDF nativos do navegador não preservam o estado de rolagem entre a reconstrução do DOM.

Isso torna tópicos longos com PDFs frustrantes de ler, especialmente para anexos de várias páginas.

Resolução Solicitada

  • Impedir que o componente de Pré-visualização de PDF Incorporada seja destruído durante a reciclagem de posts OU
  • Fornecer uma maneira para que os componentes de plugin/tema declarem “estado persistente” para que o Discourse não os desmonte
  • Ou expor uma configuração do site para desativar a reciclagem de fluxo de posts para posts contendo visualizadores de PDF incorporados

Mesmo uma correção parcial — por exemplo, ignorar a reciclagem para posts contendo embeds de PDF — resolveria o problema.

Contexto Adicional

Este não é um problema de ambiente isolado: foi reproduzido de forma confiável em compilações de teste limpas, múltiplos navegadores e em diferentes PDFs.

Não há tópicos no Meta descrevendo esse comportamento, então esta pode ser uma regressão não relatada ou uma consequência não intencional das melhorias na virtualização de fluxo.

1 curtida