عندما أدرج رابطًا إلى قسم في صفحة، لا يغير هذا الرابط، عند النقر عليه، سجل المتصفح. يؤدي التنقل للخلف إلى مغادرة الصفحة بدلاً من العودة إلى موضع الصفحة حيث تم تعريف الرابط.
تعديل: حسنًا، في هذا النظام (Discourse) لا يمكنني إنشاء عنصر بمعرف (ID)، لذا لا يمكنني عرض مثال هنا. الكود المصدري هنا هو ما أود القيام به، لكنه مجرد توضيح ولا يؤثر على جوهر مشكلتي:
<div id="link-target"></div>
*هذا القسم مرتبط من الأعلى. لا يوجد شيء هنا.*
هذا إلى حد ما متوقع. إذا نقرت على رابط إلى منشور آخر في نفس الموضوع، فلن يُضاف أيضًا إلى مكدس السجل، وهو رابط كامل بدون أجزاء، لذا لا نقوم أبدًا بإدراج المنشورات داخل الموضوع في السجل.
إليك صفحة نموذجية بدون JavaScript. في متصفح Chromium، عند النقر على الرابط، يتم الانتقال إلى أسفل الصفحة. وعند النقر للعودة، تعود إلى المكان الذي نقرت منه. هذا السلوك المتوقع الذي ستجده في كل موقع ويب آخر لا يستهلك هذا السجل.
أفترض أن Discourse يتعامل مع أجزاء عناوين URL في JavaScript عن طريق التمرير إلى الموقع، وبالتالي يجب دفع السجل بشكل صريح.
عبّر @codinghorror عن رأي قوي وحاسم بشأن هذا الأمر هنا. من المدهش رؤية رأي قوي بهذا الشكل بشأن تغيير في سلوك متصفحات الويب القياسي. وبكل عدل، لم أستخدم Discourse بعد للتنقل المكثف بين المواضيع، لذا لا أستطيع تقدير وضوح حججه.
أستخدم Discourse جزئيًا للـ توثيق، وهذا السلوك مُزعج للغاية لدرجة أنني أخشى النقر على رابط وفقدان مكاني في الصفحة.
إذا كنت تميل إلى النقر على أي من روابط جدول المحتويات ثم العودة إلى نقطة البداية عبر سجل المتصفح، فلا يمكنك ذلك.
لماذا نوفر جدول محتويات في المقام الأول؟
بالنسبة للمواقع التي ترغب في دعم تنقل المتصفح القياسي، هل هناك أي اقتراحات؟
أنا أبحث في تعديل سلوك التمرير إلى العنصر (monkeypatching) الذي أشك في أنه السبب وراء هذه المشكلة، لكنني أبدأ من الصفر تقريبًا من حيث معرفة قاعدة الكود سأصل إلى الحل في النهاية، ولكن إذا كان لدى أحدكم بعض التوجيهات، فسأقدر المساعدة!
اعتمادًا على السياق الذي ستستخدم فيه الروابط التشعبية، قد يكون هذا الإضافة جدول المحتويات مفيدًا (ورأيي أنه يناسب بشكل جيد صفحة الشروط والأحكام وصفحة الأسئلة الشائعة)؟
مثال هنا.
لم أدرك أبدًا أن هذا كان يزعجني حتى لفتت انتباهي إليه. غالبًا ما أحاول العودة إلى الصفحة التي نقرت فيها على رابط في ديسكورش، لكنني أنتهي في صفحة سابقة. أمر مزعج جدًا. كنت دائمًا أرجعه إلى مزيج من تطبيق iOS، حيث أستخدمه تقريبًا لكل شيء يتعلق بدسكورش، وإلى خطأ مني.
هذا بالتأكيد هو الحال، وسيسعدنا إصلاح هذا الأمر يا @Johani، لكنني أشعر بأنه معقد للغاية. ربما يمكننا استخدام pushstate عند النقر على رابط في جدول المحتويات.
لقد قمت بتنفيذ حل بديل (يمكن اعتباره نهجًا مناسبًا لتخصيص الموقع نظرًا لوجهة نظر Discourse في التنقل عبر الروابط) من خلال مكون سمة. يتبع هذا النمط المستخدم في DiscoTOC حيث تتم إضافة علامة إلى المنشور لتحفيز السلوك. الكود المطبق موجود هنا.
أعتقد أن تعديل DiscoTOC لاستخدام أجزاء الروابط (URL fragments) وسجل المتصفح فكرة جيدة. يتطلب هذا تغيير نهج المكون في التنقل، وهو ليس تغييرًا بسيطًا. يستخدم DiscoTOC سمات البيانات (data attributes) لنقل الأهداف بدلاً من روابط href. لا يوجد أي محاولة لعكس موقع الصفحة الجديد في عنوان URL للمتصفح (window.location).
أعتقد أن النمط الذي أستخدمه أعلاه يمكن أن يعمل مع DiscoTOC، لكن ذلك له آثار أوسع على ذلك المكون نظرًا لنهجه الحالي.