CTRL+F検索の中断、代替方法を提供してください

皆さん、DiscourseでCTRL+Fを使う際に、現在画面に表示されていない投稿が、遅延読み込み/メモリからのアンロードシステムのために検索結果から消えてしまうという、同じ厄介な問題に遭遇しました。64GBのRAMがあっても、ブラウザ内でトピック全体を検索することはできません。私が理解する限り、これはメモリ節約というよりも、アンチスクレイピング機能のようです。以下に、うまくいった方法と、見つけたより安全な代替案を示します。

  1. 印刷ビューを使用する: トピックURLの末尾に/printを追加します。例: https://forum.example.com/t/topic-name/12345/print。これにより、トピック内のすべての投稿が一度に読み込まれ、ブラウザの検索(CTRL+F)で機能します。レイアウトは簡素化されていますが、全文検索には最適です。

  2. すべて読み込まれるまでスクロールする: 遅延読み込みシステムがDOM内のすべての投稿をレンダリングするまでスクロールし続けます。その後、CTRL+Fですべてを検索できます。長いスレッドでは面倒ですが、追加ツールなしで機能します。

  3. Discourse APIを使用する: すべてのトピックには、https://forum.example.com/t/{topic_id}.jsonのようなJSONエンドポイントがあります。post_stream.posts配列からすべての投稿を抽出し、テキストエディタで開いて快適に検索できます。安全で公式であり、遅延読み込みに関係なく機能します。

  4. Userscript / Greasemonkeyアプローチ: この簡単なユーザースクリプト(Chrome/Firefox用)を使用して、ページ全体の投稿読み込みを自動化できます。トピックが完全にレンダリングされるまで、「さらに投稿を読み込む」ボタンを自動的にクリックします。

// ==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); // wait and try again
        }
    }
    window.addEventListener('load', () => {
        setTimeout(loadAll, 1000); // start a second after page load
    });
})();

完了後、CTRL+Fでスレッド内のすべてを検索できます。

エクスポート/外部検索: 印刷ビューまたはAPI JSONを使用して、投稿をPDF、HTML、またはプレーンテキストにエクスポートします。VSCodeやNotepad++などのエディタで開いて全文検索します。

:warning: サーバーハックは試さないでください: データベースへの侵入やサーバー側でのコンテンツのスクレイピングは違法であり、不要です。API / 印刷ビュー / ユーザースクリプトを使用してください。これらはすべて安全で確実に機能します。

要するに: 最も簡単なのは/printビューです。より柔軟なのはAPI JSONまたはユーザースクリプトです。CTRL+Fは、すべての投稿がDOMに読み込まれると機能します。Discourseチームがこれを見て、いつか「完全検索」オプションを検討してくれることを願っています。これは、調査や深いトピック読書を行うすべての人にとって深刻なUXの問題です😅