Perturbation de la recherche CTRL+F, veuillez fournir une méthode alternative

Salut à tous, j’ai rencontré le même problème agaçant avec CTRL+F sur Discourse : les messages qui ne sont pas actuellement à l’écran disparaissent de la recherche à cause du système de chargement paresseux/déchargement de la mémoire. Même avec 64 Go de RAM, vous ne pouvez pas rechercher l’intégralité du sujet dans le navigateur. D’après ce que j’ai compris, il s’agit davantage d’une fonctionnalité anti-scraping que d’une économie de mémoire. Voici ce qui a fonctionné (et les alternatives plus sûres) que j’ai trouvées :

  1. Utiliser la Vue Imprimer : Ajoutez /print à la fin de l’URL du sujet, par exemple https://forum.example.com/t/topic-name/12345/print. Cela charge tous les messages du sujet à la fois et fonctionne avec la recherche du navigateur (CTRL+F). La mise en page est simplifiée, mais parfaite pour la recherche en texte intégral.

  2. Faire défiler jusqu’à ce que tout soit chargé : Continuez à faire défiler jusqu’à ce que le système de chargement paresseux ait rendu tous les messages dans le DOM. CTRL+F trouvera alors tout. Cela peut être fastidieux pour les longs fils de discussion, mais cela fonctionne sans outils supplémentaires.

  3. Utiliser l’API Discourse : Chaque sujet a un point de terminaison JSON comme https://forum.example.com/t/{topic_id}.json. Vous pouvez extraire tous les messages du tableau post_stream.posts, les ouvrir dans un éditeur de texte et effectuer la recherche confortablement. Sûr, officiel et fonctionne indépendamment du chargement paresseux.

  4. Approche Userscript / Greasemonkey : Vous pouvez automatiser le chargement complet des messages de la page avec ce simple userscript pour Chrome/Firefox. Il clique automatiquement sur « charger plus de messages » jusqu’à ce que le sujet soit entièrement rendu :

// ==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); // attendre et réessayer
        }
    }
    window.addEventListener('load', () => {
        setTimeout(loadAll, 1000); // commencer une seconde après le chargement de la page
    });
})();

Une fois terminé, CTRL+F recherchera tout dans le fil de discussion.

Exportation / Recherche externe : Utilisez la vue d’impression ou le JSON de l’API pour exporter les messages au format PDF, HTML ou texte brut. Ouvrez-les dans un éditeur comme VSCode ou Notepad++ pour la recherche en texte intégral.

:warning: N’essayez pas de pirater le serveur : Pénétrer dans la base de données ou gratter le contenu côté serveur est illégal et inutile. Utilisez l’API / la vue d’impression / le userscript — ils sont tous sûrs et fonctionnent de manière fiable.

TL;DR : Le plus simple : vue /print. Plus flexible : JSON de l’API ou userscript. CTRL+F fonctionne une fois que tous les messages sont chargés dans le DOM. J’espère que l’équipe Discourse verra ceci et envisagera peut-être une option de « recherche complète » un jour — c’est un problème sérieux d’expérience utilisateur pour quiconque fait de la recherche ou lit en profondeur un sujet :sweat_smile: