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
- Crie um tópico com um anexo PDF.
- Certifique-se de que o componente Pré-visualizações de PDF Incorporadas esteja ativo.
- Role para baixo no tópico até que o post contendo o PDF saia da área de visualização (viewport).
- Role de volta para a mesma pré-visualização de PDF.
- 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.