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

Bonjour,

J’étais sur le forum discourse suivant :

Et j’avais besoin de trouver le mot « mac ».

En utilisant CTRL+F, il ne pouvait trouver cette chaîne que lorsqu’elle était à l’écran. Le défilement lui-même faisait disparaître les correspondances.

Cela perturbe également l’indicateur de correspondance de position de défilement dans la barre de défilement.

Je comprends l’affirmation selon laquelle c’est pour « économiser de la mémoire », mais ce système dispose de 64 gigaoctets de mémoire et cette page contient moins de 100 kilooctets de texte. Je comprends donc qu’il s’agit en fait d’une fonctionnalité anti-scraping comme celle que Facebook utilise pour empêcher (mais échoue à) le scraping.

En cherchant ce bug étrange, j’ai trouvé une mer absolue de plaintes concernant cette anti-fonctionnalité extrêmement perturbatrice.

Quelles sont les alternatives ?

Peut-on la désactiver côté client ?

Qu’en est-il du chargement de la page en mode impression ?

Existe-t-il un moyen de forcer un vidage complet du texte de toute la page afin que je puisse simplement la visualiser dans un éditeur de texte ?

Qu’en est-il d’un script Greasemonkey, quelque chose qui pourrait casser la fonctionnalité qui décharge le texte de la mémoire afin qu’il puisse être recherché ?

Ma seule option est-elle de pénétrer le serveur de base de données, d’exfiltrer tout le contenu discourse, puis d’écrire du code pour afficher le fil de discussion sans ces perturbations ?

Je vois des plaintes à ce sujet depuis 2014, donc j’imagine qu’il n’y a aucun désir de résoudre ce problème et que c’est une « fonctionnalité et non un bug », mais une fonctionnalité pour les propriétaires et non pour l’utilisateur ?

Quelle est la « méta » sur ce problème très sérieux qui me fait CRAINDRE d’avoir un jour le malheur de devoir naviguer sur un forum « discourse » ?

Oui, je suis amer, comment le voyez-vous ?

J’ai demandé à la machine à « slop » de me donner une version imprimable

Et après environ 1 minute de traitement de l’aperçu, ÇA MARCHE

Ajoutez /print pour charger jusqu’à 100 messages à la fois, voyez-le en action ici : https://forum.openwrt.org/t/re-luci-add-support-for-managing-tags-in-dhcp-and-dns-configuration-web-page/220640/print

Oui, voir https://forum.openwrt.org/raw/220640

Merci !

La méthode raw fonctionne pour moi,

y a-t-il un module complémentaire pour charger automatiquement chaque page en mode brut par hasard

J’étais en train d’écrire un autre message, désolé, je ne peux pas rester toute la journée à attendre le délai d’expiration pour une image à la fois.

Oui, j’ai essayé, mais

Je ne souhaite pas utiliser la recherche côté serveur

et de plus, les résultats ne sont pas utilisables pour moi

Voici à quoi cela ressemble

Je suis désolé,

J’essayais de résoudre un problème dans openwrt

Et j’étais vraiment frustré de ne pas pouvoir faire de recherche comme je m’attends à ce qu’un navigateur puisse le faire.

Je suis désolé que vous pensiez que je suis impoli de ne pas passer de temps ici, mais veuillez comprendre mon point de vue.

J’ai du mal à utiliser le logiciel, au point de commencer à chercher des solutions pour surmonter le problème.

Et lorsque je suis incapable de trouver la solution, je trouve le nom du logiciel, je trouve son espace de discussion, je crée un compte, je fais le captcha, je fais la vérification par e-mail, je recherche sur le forum des questions similaires, j’en trouve, elles sont fermées, j’en trouve d’autres, je décide de créer un nouveau message, je commence à écrire, j’écris mon commentaire entier, avec de nombreux exemples d’images

et puis j’appuie sur répondre, et je reçois un message d’erreur indiquant que vous ne pouvez publier qu’une seule image à la fois

Ce qui m’obligerait à modifier tout mon message qui dépend de ces captures d’écran pour la cohérence.

Alors j’essaie de couper mon message en 1 image par publication, mais il y a ensuite une période d’attente inconnue à respecter entre les messages, et je veux juste retourner au travail et je commence à penser, ces gars connaissent sûrement la lutte, donc je n’ajoute rien en leur disant à quel point je suis troublé par cela

mais non, en tant qu’utilisateur avancé, j’ai le devoir de faire savoir aux développeurs les difficultés des autres utilisateurs et maintenant cela fait une bonne demi-heure que je lutte pour raconter cette lutte.

Alors… Je suis désolé si c’est impoli, mais je ne veux pas passer un autre nombre inconnu de minutes supplémentaires à découvrir et à effectuer les actions requises pour publier mon message.

Mais je vous assure, je ne veux pas être impoli avec vous, je suis juste très frustré !

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:

Ce script Greasemonkey fonctionne-t-il ?

L’avez-vous fait ?

Pour clarifier concernant le userscript que j’ai partagé : je l’ai écrit spécifiquement pour fonctionner avec le forum que j’utilisais, il peut donc y avoir des différences dans la structure HTML si vous essayez de l’adapter à d’autres sites. Le script fonctionne sur les sujets Discourse standards qui utilisent le système de « Charger plus de messages » (chargement différé) en cliquant automatiquement sur le bouton charger plus de messages de manière répétée jusqu’à ce que tous les messages soient chargés dans le DOM. Une fois que tous les messages sont chargés, vous pouvez utiliser CTRL+F de votre navigateur pour rechercher normalement des mots-clés.

En fait, beaucoup de gens utilisent Tampermonkey/Greasemonkey depuis des années pour gérer Discourse de cette manière, et cela fonctionne bien même sur de très grands forums.

:warning: Note : Certains forums peuvent modifier la classe du bouton (par exemple, \.load-more\[data-more-url\]), vous devrez donc peut-être ajuster légèrement le sélecteur pour qu’il corresponde au bouton réel.