"فتح الروابط الخارجية في علامة تبويب جديدة افتراضيًا" لا يعمل

مرحبًا،

في الآونة الأخيرة، توقفت جميع الروابط الخارجية في منتداي عن الفتح في تبويب جديد. لقد تحققت مرة أخرى من خيار “افتح الروابط الخارجية في تبويب جديد افتراضيًا” وهو محدد:

لقد تفحصت كود HTML خلف الروابط عبر أداة فحص العنصر، ومن الواضح أن target="_blank" مفقود.

ما الذي يجب علي فعله؟

هل جربت ذلك في وضع الأمان؟ ربما يتسبب سمة جديدة، أو مكون سمة، أو إضافة في التداخل؟ :face_with_monocle:

لقد جربت الموقع في الوضع الآمن، لكن المشكلة لا تزال كما هي

ما إصدار Discourse الذي تعمل عليه؟ سيكون من الأسهل معرفة ما إذا كان بإمكاني إعادة إنتاج المشكلة.

أنا أشغل أحدث إصدار 2.7.0.beta1

هل يمكنك اختبار ذلك هنا على ميتا؟ اضبط تفضيلاتك هنا لفتح الروابط الخارجية في علامة تبويب جديدة، وانظر ما إذا كان ذلك يعمل بالنسبة لك. إنه يعمل بشكل جيد للغاية بالنسبة لي.

مرحبًا @riteshsaini

تُعدّ فحص عنصر DOM مباشرةً باستخدام وحدة تحكم مطوري الويب من أفضل خطوات استكشاف الأخطاء وإصلاحها التي يمكنك اتخاذها في البداية؛ حيث يمكنك من خلالها فحص السمات الدقيقة للرابط الخاص بك، وتحديدًا سمة “target”.

في كثير من الأحيان، لا يمكنك رؤية سمات DOM هذه بمجرد قراءة كود المصدر (فقد توجد هذه السمات في DOM ولكنها غير موجودة في كود المصدر)، وبالتالي ستحتاج إلى استعلام DOM للحصول على السمات (للتأكد بنسبة 100%).

أتمنى أن يكون هذا واضحًا.

أعتقد أن هذا ما فعله هنا

لا. قراءة كود المصدر لا تعادل فحص الـ DOM.

يمكن أن تختلف سمات الـ DOM (وغالبًا ما تختلف) عن كود المصدر؛ خاصةً في المواقع التي تستخدم الكثير من جافا سكريبت للتلاعب بالـ DOM (مثل Discourse).

لهذا السبب ذكرت تحديدًا ضرورة استعلام الـ DOM وعدم الاكتفاء بالنظر إلى كود المصدر :slight_smile:

ومع ذلك، أوافقك الرأي يا @osioke، حيث يُظهر كود المصدر بوضوح غياب سمة الهدف؛ ولكن عند فحص الـ DOM، سنكون على “يقين” بشأن السمة؛ لأن الـ DOM قد يكون في حالة مختلفة عن كود المصدر (وغالبًا ما يكون كذلك).

شخصيًا، أنا معجب كبير بمبدأ “عدم افتراض أي شيء”، وهذا هو السبب في أنني اقترحت على @riteshsaini “التأكد” من خلال فحص الـ DOM ثم “المضي قدمًا” من هناك.

من الممكن جدًا أن تكون سمات الهدف في الروابط ضمن الـ DOM وكود المصدر في نفس الحالة؛ لكنني دائمًا أنصح الأشخاص الذين يستكشفون المشاكل بعدم افتراض مثل هذه التفاصيل؛ ومن هنا جاءت اقتراحي باستعلام الـ DOM كخطوة في عملية استكشاف الأخطاء وإصلاحها.

أتمنى أن يكون هذا مفيدًا.

بدلاً من التعديل في الإعدادات، أستخدم هذه الطريقة

تجربة: Theme Creator

<script type="text/discourse-plugin" version="0.8">
    api.onPageChange((url, title) => {
        // فتح الروابط الخارجية تلقائيًا في علامة تبويب أو نافذة جديدة
        var pc = 1;
        if ($("html").hasClass("mobile-device")) pc = 0;
        var links = document.links;
        for (var i = 0, linksLength = links.length; i < linksLength; i++) {
            if (links[i].hostname != window.location.hostname) {
                if (pc) links[i].target = '_blank'; else links[i].target = '_self';
            }
        }
    });
</script>

… ويوضح ذلك بشكل مثالي في مثال قوي على واجهة برمجة تطبيقات Discourse كيف سيكون DOM ورمز المصدر في حالة مختلفة، ولن ترى سمات الهدف في كود HTML الذي تم تعيينه بواسطة JavaScript أعلاه :slight_smile:

@Bcat شكرًا لك على مشاركة هذا المقطع. لكن أين يجب أن أضيفه؟

ملاحظة: عذرًا عن السؤال التافه. لست مبرمجًا وأنا جديد تمامًا على نظام Discourse :slight_smile:

مرحبًا @neounix، شكرًا لك على ردك.

لست متأكدًا تمامًا من كيفية القيام بذلك :slight_smile: أرجو توضيح ذلك لي إذا كان لديك بعض الوقت المتاح.

عرض الموضوع: Installing a theme or theme component

discourse-automatically-open-external-links-in-new-tab.zip|مرفق (843 بايت)

هل تفحصت الإعدادات في ملفك الشخصي تحت preferences/interface؟ لأن هذا الوضع يحدث عادةً عندما يكون فتح الروابط الخارجية في علامات تبويب جديدة معطلاً في ملفك الشخصي.

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

يعمل كما ينبغي. بشكل مثالي تمامًا! شكرًا جزيلاً لك :slight_smile:

هل هناك حل لإضافة rel="nofollow" إلى جميع الروابط الخارجية، حتى تلك التي يضيفها المسؤول؟

لقد كنت أواجه صعوبة في القيام بذلك منذ أشهر الآن.

بالنسبة للمنتديات الخاصة بالمشاركة والتنزيل باستخدام روابط من Bitly أو مواقع أخرى (أقل أمانًا)،
هل تفكر في استخدام rel="noopener noreferrer" بدلاً من rel="nofollow"؟
يمكنك معرفة المزيد عن noopener noreferrer.

يمكنني النظر في إضافة noopener noreferrer، لكني سأظل بحاجة إلى إضافة nofollow معها. والسبب هو أنني لا أريد من Google متابعة أو فهرسة هذه الروابط لأنها روابط تابعة. فقط nofollow يمكنه المساعدة في ذلك.

أضف links[i].rel = 'nofollow'; أو الملف: discourse-automatically-open-external-links-in-new-tab.zip (856 بايت)