Interruzione della ricerca CTRL+F, si prega di fornire un metodo alternativo

Ciao a tutti, ho riscontrato lo stesso fastidioso problema con CTRL+F su Discourse: i post che non sono attualmente visibili scompaiono dalla ricerca a causa del sistema di lazy-load/scaricamento dalla memoria. Anche con 64 GB di RAM, non è possibile cercare l’intero argomento nel browser. Da quanto ho capito, questa è più una funzione anti-scraping che un risparmio di memoria. Ecco cosa ha funzionato (e le alternative più sicure) che ho trovato:

  1. Usa la Vista Stampa: Aggiungi /print alla fine dell’URL dell’argomento, ad esempio https://forum.example.com/t/topic-name/12345/print. Questo carica tutti i post dell’argomento contemporaneamente e funziona con la ricerca del browser (CTRL+F). Il layout è semplificato, ma perfetto per la ricerca full-text.

  2. Scorri Finché Tutto Viene Caricato: Continua a scorrere finché il sistema di lazy-load non ha renderizzato tutti i post nel DOM. CTRL+F troverà quindi tutto. Può essere noioso per i thread lunghi, ma funziona senza strumenti aggiuntivi.

  3. Usa l’API di Discourse: Ogni argomento ha un endpoint JSON come https://forum.example.com/t/{topic_id}.json. Puoi estrarre tutti i post dall’array post_stream.posts, aprirli in un editor di testo e cercare comodamente. Sicuro, ufficiale e funziona indipendentemente dal lazy-load.

  4. Approccio Userscript / Greasemonkey: Puoi automatizzare il caricamento completo dei post della pagina con questo semplice userscript per Chrome/Firefox. Clicca automaticamente su “carica altri post” finché l’argomento non è completamente renderizzato:

// ==UserScript==
// @name         Discourse Load All Posts
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Auto-click "load more posts" to fully render topic for search
// @match        https://*/*
// @grant        none
// ==/UserScript==
(function() {
    'use strict';
    function loadAll() {
        const button = document.querySelector('.load-more[data-more-url]');
        if (button) {
            button.click();
            setTimeout(loadAll, 500); // aspetta e riprova
        }
    }
    window.addEventListener('load', () => {
        setTimeout(loadAll, 1000); // inizia un secondo dopo il caricamento della pagina
    });
})();

Una volta terminato, CTRL+F cercherà tutto nel thread.

Esportazione / Ricerca Esterna: Usa la vista di stampa o l’API JSON per esportare i post in PDF, HTML o testo semplice. Apri in un editor come VSCode o Notepad++ per la ricerca full-text.

:warning: Non tentare hack del server: Penetrare il database o fare scraping di contenuti lato server è illegale e non necessario. Usa l’API / vista di stampa / userscript: sono tutti sicuri e funzionano in modo affidabile.

TL;DR: Il più facile: vista /print. Più flessibile: API JSON o userscript. CTRL+F funziona una volta che tutti i post sono caricati nel DOM. Spero che il team di Discourse veda questo e magari consideri un’opzione di “ricerca completa” un giorno: è un serio problema di UX per chiunque faccia ricerca o legga a fondo gli argomenti :sweat_smile: