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

مرحباً،

كنت أتصفح منتدى ديسكورس التالي

وكنت بحاجة إلى العثور على كلمة “mac”.

باستخدام CTRL+F، لم يتمكن من العثور على هذه السلسلة إلا عندما كانت معروضة على الشاشة. التمرير بحد ذاته جعل التطابقات تختفي.

كما أنه يعطل مؤشر تطابق موضع التمرير في شريط التمرير

أتفهم الادعاء بأن هذا “لتوفير الذاكرة”، ولكن هذا النظام يحتوي على 64 جيجابايت من الذاكرة وهذه الصفحة أقل من 100 كيلوبايت من النص. لذلك أفهم أن هذه في الواقع ميزة مضادة لكشط البيانات (anti-scraping) مثلما تستخدم فيسبوك لمنع (ولكن تفشل في) الكشط.

بالبحث عن هذا الخلل الغريب، وجدت بحراً مطلقاً من الشكاوى حول هذه الميزة المعطِّلة للغاية.

ما هي البدائل؟

هل يمكن تعطيلها من جانب العميل؟

ماذا عن تحميل الصفحة في وضع الطباعة؟

هل هناك أي طريقة لإجبار تفريغ نصي كامل للصفحة بأكملها حتى أتمكن من عرضها ببساطة في محرر نصوص؟

ماذا عن سكربت Greasemonkey، أي شيء يمكنه كسر الميزة التي تزيل النص من الذاكرة حتى يمكن البحث فيه؟

هل خياري الوحيد هو اختراق خادم قاعدة البيانات، واستخراج جميع محتويات ديسكورس، ثم كتابة كود لعرض سلسلة التعليقات بدون هذه الاضطرابات؟

أرى شكاوى حول هذا منذ عام 2014، لذا أتخيل أنه لا يوجد رغبة في حل هذه المشكلة وأنها “ميزة وليست خطأ” ولكنها ميزة لأصحابها وليس للمستخدم؟

ما هو “الميتا” (meta) حول هذه المشكلة الخطيرة جداً التي تجعلني أخشى (DREAD) أن أضطر يوماً ما إلى التنقل في منتدى “ديسكورس”؟

نعم، أنا ساخط، كيف يمكنك أن تعرف؟

لقد طلبت من آلة الطباعة أن تعطيني نسخة مطبوعة

وبعد حوالي دقيقة من معالجة المعاينة، فإنها تعمل بالفعل

أضف /print لتحميل ما يصل إلى 100 مشاركة في المرة الواحدة، شاهدها وهي تعمل هنا: https://forum.openwrt.org/t/re-luci-add-support-for-managing-tags-in-dhcp-and-dns-configuration-web-page/220640/print

نعم، انظر https://forum.openwrt.org/raw/220640

شكراً!

طريقة raw (الخام) تفعل ذلك من أجلي،

هل يوجد إضافة (addon) لتحميل كل صفحة بشكل خام تلقائياً بالصدفة؟

كنت أكتب رسالة أخرى، آسف لا يمكنني البقاء طوال اليوم لانتظار انتهاء مهلة الصورة تلو الأخرى.

نعم لقد جربت ذلك ولكن
لا أرغب في استخدام البحث من جانب الخادم
وكذلك النتائج ليست بطريقة قابلة للاستخدام بالنسبة لي
إليك كيف يبدو ذلك

أنا آسف،

كنت أحاول حل مشكلة في openwrt

وكنت أشعر بالإحباط الشديد لعدم قدرتي على البحث بالطريقة التي أتوقع أن يتمكن بها المتصفح من البحث.

أنا آسف لأنك تشعر أنني وقح لعدم قضاء وقت هنا، ولكن يرجى التفهم من وجهة نظري.

أنا أكافح لاستخدام البرنامج، لدرجة أنني بدأت أبحث عن حلول للتغلب على المشكلة.

وعندما لا أتمكن من العثور على الحل، أجد اسم البرنامج، وأجد مساحة النقاش الخاصة به، وأنشئ حسابًا، وأقوم بحل اختبار الكابتشا (captcha)، وأقوم بالتحقق من البريد الإلكتروني، وأبحث في المنتدى عن أسئلة مماثلة، وأجد بعضها، وهي مغلقة، وأجد أخرى، وأقرر إنشاء منشور جديد، وأبدأ في الكتابة، وأكتب تعليقي بالكامل، مع العديد من الأمثلة المصورة

ثم أضغط على “رد” (reply)، وأحصل على رسالة خطأ تفيد بأنه لا يمكنني نشر سوى صورة واحدة في كل مرة

مما يتطلب مني تعديل رسالتي بأكملها التي تعتمد على لقطات الشاشة هذه لكي تكون متماسكة.

لذا أحاول تقسيم رسالتي إلى صورة واحدة لكل منشور، ولكن بعد ذلك هناك فترة مهلة غير معروفة يجب انتظارها بين الرسائل، وأنا فقط أريد العودة إلى العمل وبدأت أفكر، هؤلاء الأشخاص يعرفون بالتأكيد عن هذا الصراع، لذا فأنا لا أضيف شيئًا بإخبارهم بمدى انزعاجي من هذا

ولكن لا، بصفتي مستخدمًا متمرسًا، لدي واجب إخبار المطورين بصراعات المستخدمين الآخرين والآن مر نصف ساعة كاملة من الصراع لمحاولة إخبارهم عن هذا الصراع.

لذا… أنا آسف إذا كان هذا وقاحة، ولكني لا أريد قضاء عدد غير معروف آخر من الدقائق الإضافية لاكتشاف وتنفيذ الإجراءات المطلوبة لنشر رسالتي.

ولكن أؤكد لك، أنني لا أقصد أن أكون وقحًا معك، أنا فقط محبط للغاية!

مرحباً بالجميع، لقد واجهت نفس المشكلة المزعجة مع 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:

هل يعمل ذلك السكريبت الخاص بـ Greasemonkey؟

هل قمت بصنعه؟

للتوضيح فقط بخصوص السكريبت الذي شاركته: لقد كتبته خصيصًا ليعمل مع المنتدى الذي كنت أستخدمه، لذلك قد تكون هناك بعض الاختلافات في هيكل HTML إذا حاولت تكييفه مع مواقع أخرى. يعمل السكريبت على مواضيع Discourse القياسية التي تستخدم نظام “تحميل المزيد من المشاركات” (التحميل الكسول) عن طريق النقر تلقائيًا على زر تحميل المزيد من المشاركات بشكل متكرر حتى يتم تحميل جميع المشاركات في نموذج الكائن للمستند (DOM). بمجرد تحميل جميع المشاركات، يمكنك استخدام CTRL+F في متصفحك للبحث عن أي كلمات رئيسية كالمعتاد.

في الواقع، استخدم العديد من الأشخاص Tampermonkey/Greasemonkey لسنوات للتعامل مع Discourse بهذه الطريقة، وهو يعمل بشكل جيد حتى على المنتديات الكبيرة جدًا.

:warning: ملاحظة: قد تقوم بعض المنتديات بتغيير الفئة (class) الخاصة بالزر (على سبيل المثال، load-more[data-more-url])، لذلك قد تحتاج إلى تعديل المحدد قليلاً ليتناسب مع الزر الفعلي.