هل يمكن لجافا سكريبت معرفة الفرق بين الخروج من خلال زر الرجوع أو الرابط؟

StackOverflow https://stackoverflow.com/questions/1208129

سؤال

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

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

يعد تذكر علامة التبويب B سلوكًا مرغوبًا فيه إذا قمت بالنقر فوق إلى الأمام إلى صفحة جديدة ثم استخدم السجل داخل التطبيق للعودة إلى الصفحة السابقة.ومع ذلك، فمن غير المرغوب فيه أن تقوم بالنقر فوق زر "الرجوع"، لأنك تريده أن يُظهر علامة التبويب "أ" مرة أخرى، بالطريقة التي ظهرت بها عند وصولك لأول مرة.

سؤالي هو ما إذا كان JavaScript com.onunload يمكن للحدث اكتشاف الفرق بين مغادرة الصفحة باستخدام زر الرجوع أو بعض الوسائل الأخرى.في هذه المرحلة، أريده أن ينسى أي علامات تبويب كان قد تذكرها لتلك الصفحة.

هل كانت مفيدة؟

المحلول

إذا كان الاختلاف الذي تحاول اكتشافه هو بين نقر المستخدم على الرابط والانتقال بعيدًا عن الصفحة بطريقة أخرى، فيمكنك اكتشاف النقر على الرابط باستخدام JavaScript عن طريق إرفاق onclick معالجات الأحداث لكل رابط تريد مراقبة النقرات عليه.

حتى إذا onunload حرائق بدون onclick بعد الإطلاق لأول مرة، يغادر المستخدم الصفحة بطريقة أخرى غير النقر فوق أحد الروابط التي يتم تتبعها.

<script type="text/javascript">
var links = document.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
    links[i].onclick = setGlobal;
}
function setGlobal() {
    window.linkClicked = true;
}
window.onunload = function() {
    if (typeof window.linkClicked === 'undefined' || !window.linkClicked) {
        // they are leaving some other way than by clicking a link
    }
}
</script>

يصبح الأمر أكثر تعقيدًا بعض الشيء إذا كان لديك بالفعل onclick الأحداث على الخاص <a> العلامات، إذا كان الأمر كذلك، فيمكنني توفير طريقة للقيام بذلك أيضًا.

بالطبع يمكنك أيضًا إرفاق جميع onclick الأحداث باستخدام jQuery أو مكتبة JavaScript أخرى.

نصائح أخرى

تتذكر المتصفحات حالة المؤقتات (استدعاءات setTimeout) التي تم إجراؤها على تلك الصفحة.

في المرة الأولى التي يتم فيها تحميل الصفحة، سيتم استدعاء onLoad، قم بتعيين مؤقت لإعادة التوجيه إلى الصفحة التالية بناءً على السجل.إذا كنت بالفعل في الصفحة الأخيرة، فلا مشكلة:D، إذا لم يكن الأمر كذلك، فسيتم إعادة توجيهها.

بالنسبة إلى IE، يتم استدعاء onLoad دائمًا، بغض النظر عما إذا كان ذلك باستخدام زر الرجوع، وبالتالي يمكنك وضع نفس الجزء من التعليمات البرمجية هناك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top