Anteprime PDF inline reimpostate a pagina 1 scorrendo un argomento

Riepilogo

Le anteprime PDF inline reimpostano costantemente la loro posizione di scorrimento (tornando alla pagina 1) quando si scorre un argomento lungo. Questo accade perché l’incorporamento del PDF viene distrutto e reinserito quando il post esce dalla visualizzazione, probabilmente a causa del riciclo/virtualizzazione del flusso di post di Discourse.

Ciò influisce su tutti i browser, tutti i PDF e si verifica anche con tutti i plugin e i temi disabilitati.

Passaggi per la Riproduzione

  1. Creare un argomento con un allegato PDF.
  2. Assicurarsi che il componente Anteprime PDF Inline sia attivo.
  3. Scorrere l’argomento fino a quando il post contenente il PDF non esce dalla visuale.
  4. Tornare indietro allo stesso anteprima PDF.
  5. Risultato:
    • Il PDF viene ricaricato dall’inizio.
    • La posizione di scorrimento dell’anteprima viene persa.
    • Il PDF viene renderizzato nuovamente come se fosse stato appena caricato.

Non viene richiesta alcuna richiesta di rete per il PDF, il che indica che il nodo DOM è stato rimosso localmente e ricreato.

Comportamento Atteso

  • L’anteprima del PDF dovrebbe mantenere la sua posizione di scorrimento e non dovrebbe ricaricarsi semplicemente scorrendo l’argomento.
  • Altri contenuti incorporati (immagini, video, Onebox) non reimpostano lo stato allo scorrimento; le anteprime PDF dovrebbero comportarsi in modo coerente.

Comportamento Attuale

  • Non appena il post esce dall’intervallo visibile, Discourse scarica il nodo DOM.
  • Quando il post torna in vista, l’incorporamento viene ricostruito.
  • Ciò forza il renderer PDF nativo del browser ad avviarsi nuovamente dalla pagina 1.
  • Ciò si verifica ogni volta che il post lascia la visuale (su o giù).

Ambiente

  • Si verifica su tutti i browser testati: Chrome, Firefox, Safari, Edge
  • Si verifica con tutti i plugin disabilitati (Modalità Sicura)
  • Si verifica con tutti i componenti del tema disabilitati
  • Si verifica con più file PDF di diverse dimensioni e formati
  • Si verifica sul ramo più recente di Discourse (tests-passed) (alla data di pubblicazione)

Note Tecniche

Discourse sembra smontare i componenti dei post fuori schermo come parte della virtualizzazione del flusso. Poiché l’anteprima del PDF utilizza un semplice \<embed\> / \<iframe\>, non dispone di un meccanismo di persistenza, quindi si resetta completamente ogni volta che:

  • willDestroyElement() viene attivato
  • il contenitore del post viene renderizzato nuovamente
  • il nodo DOM viene ricreato al rientro nella visuale

Questo è unico per i PDF perché i visualizzatori PDF nativi del browser non preservano lo stato di scorrimento tra la ricostruzione del DOM.

Questo rende la lettura di argomenti lunghi con PDF frustrante, specialmente per gli allegati multipagina.

Risoluzione Richiesta

  • Impedire che il componente Anteprima PDF Inline venga distrutto durante il riciclo dei post OPPURE
  • Fornire un modo affinché i componenti plugin/tema dichiarino uno “stato persistente” in modo che Discourse non li smonti
  • Oppure esporre un’impostazione del sito per disabilitare il riciclo del flusso di post per i post contenenti visualizzatori PDF inline

Anche una correzione parziale — ad esempio, saltare il riciclo per i post contenenti incorporamenti PDF — risolverebbe il problema.

Contesto Aggiuntivo

Questo non è un problema ambientale isolato: è stato riprodotto in modo affidabile su build di test pulite, più browser e su diversi PDF.

Non ci sono argomenti Meta che descrivono questo comportamento, quindi questa potrebbe essere una regressione non segnalata o una conseguenza involontaria dei miglioramenti della virtualizzazione del flusso.

1 Mi Piace