تعطيل خاصية البحث CTRL+F، يرجى توفير طريقة بديلة

مرحباً بالجميع، لقد واجهت نفس المشكلة المزعجة مع CTRL+F في Discourse—فالمنشورات غير المعروضة حاليًا تختفي من البحث بسبب نظام التحميل الكسول/التفريغ من الذاكرة. حتى مع وجود ذاكرة وصول عشوائي (RAM) بسعة 64 جيجابايت، لا يمكنك البحث في الموضوع بأكمله داخل المتصفح. مما أفهمه، هذا أشبه بميزة لمكافحة الكشط (anti-scraping) أكثر من كونه ميزة لتوفير الذاكرة. إليك ما نجح (والبدائل الأكثر أمانًا) التي وجدتها:

  1. استخدام عرض الطباعة (Print View): أضف /print إلى نهاية عنوان URL للموضوع، على سبيل المثال: https://forum.example.com/t/topic-name/12345/print. هذا يقوم بتحميل جميع المنشورات في الموضوع دفعة واحدة ويعمل مع بحث المتصفح (CTRL+F). التصميم مبسط، ولكنه مثالي للبحث في النص الكامل.

  2. التمرير حتى يتم تحميل كل شيء: استمر في التمرير حتى يقوم نظام التحميل الكسول بعرض جميع المنشورات في نموذج كائن المستند (DOM). سيجد CTRL+F كل شيء بعد ذلك. قد يكون الأمر مملاً للمواضيع الطويلة، ولكنه يعمل بدون أدوات إضافية.

  3. استخدام واجهة برمجة تطبيقات Discourse (Discourse API): كل موضوع لديه نقطة نهاية JSON مثل https://forum.example.com/t/{topic_id}.json. يمكنك استخراج جميع المنشورات من مصفوفة post_stream.posts، وفتحها في محرر نصوص، والبحث بشكل مريح. آمن ورسمي ويعمل بغض النظر عن التحميل الكسول.

  4. نهج السكريبت للمستخدمين / 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); // انتظر وحاول مرة أخرى
        }
    }
    window.addEventListener('load', () => {
        setTimeout(loadAll, 1000); // ابدأ بعد ثانية واحدة من تحميل الصفحة
    });
})();

بعد الانتهاء، سيقوم CTRL+F بالبحث في كل شيء في الموضوع.

التصدير / البحث الخارجي: استخدم عرض الطباعة أو API JSON لتصدير المنشورات إلى PDF أو HTML أو نص عادي. افتحها في محرر مثل VSCode أو Notepad++ للبحث في النص الكامل.

:warning: لا تحاول اختراق الخادم: اختراق قاعدة البيانات أو كشط المحتوى من جانب الخادم أمر غير قانوني وغير ضروري. استخدم واجهة برمجة التطبيقات (API) / عرض الطباعة / سكريبت المستخدمين—فهي جميعها آمنة وتعمل بشكل موثوق.

باختصار: الأسهل: عرض /print. الأكثر مرونة: API JSON أو سكريبت المستخدمين. يعمل CTRL+F بمجرد تحميل جميع المنشورات في DOM. آمل أن يرى فريق Discourse هذا وربما يفكرون في خيار “البحث الكامل” يومًا ما—إنها مشكلة خطيرة في تجربة المستخدم (UX) لأي شخص يقوم بالبحث أو القراءة العميقة للمواضيع :sweat_smile: