سؤال

يستخدم Gmail # عند النقر فوق بريد ما لتمييز الصفحة (+ إجراء Ajax).http://mail.google.com/mail/#inbox/1238e709e37a1394

وجدت:جوجل تستخدم # بدلا من البحث؟في عنوان URL.لماذا؟

في FF أو Chrome، يمكنك استخدام Forward وBack دون التحديث بين عناوين URL تلك:http://X.com/MyPage.aspx#1 http://X.com/MyPage.aspx#2 http://X.com/MyPage.aspx#3

ولكن في IE، يتم تحديث الصفحة ولا يحسب المعلمات بعد # عند اتخاذ إجراء خلفي.

كيف يحدث Gmail السحر؟

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

المحلول 2

وهذا هو ما كنت أبحث عنه: http://nix.lv/history/demo.html#3

والعثور على: حفظ مرساة في تاريخ IE6

نصائح أخرى

يمكنني أن أعطيك الإجابة على هذا السؤال، لأنني واجهت هذه المشكلة وقمت بحلها.

هناك بعض المفاهيم التي يجب فهمها هنا أولاً:

  1. لا يمكن لجافا سكريبت تغيير سجل المتصفح مباشرة.
  2. عندما يتغير عنوان URL الأساسي لإطار iframe في الصفحة، يتم تحديث السجل.(ولكن هذا به بعض المراوغات مع متصفحات مختلفة).
  3. يحتوي عنوان url على جزء "مجزأ":على سبيل المثال، في URL http://mail.google.com/mail#inbox, #inbox هو الجزء المجزأ.دعونا نسميها "التجزئة".لذا http://mail.google.com/mail سيكون "عنوان URL الأساسي" الخاص بنا.

يتم تتبع السجل بواسطة GMail بشكل أساسي باستخدام الحيل المستندة إلى هذا "التجزئة".

لذلك، بعض المفاهيم الأخرى:

  1. عندما يتغير عنوان URL الموجود في شريط العناوين، يتم تحديث السجل (ينتقل عنوان URL السابق إلى السجل)
  2. عندما يتم تغيير عنوان URL الأساسي، تتم إعادة تحميل الصفحة.
  3. عندما يتغير جزء التجزئة من عنوان URL دون تغيير عنوان URL الأساسي، لا تتم إعادة تحميل الصفحة.

لذلك، عندما تذهب من http://mail.google.com/mail#inbox ل http://mail.google.com/mail#sent, ، الصفحة لا يتم تحديثه.

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

لحل هذه المشكلة، قمت بإعداد أداة مفيدة:ال محلل URL.يمكنه تحليل معلمات GET في عنوان URL، بالإضافة إلى المعلمات المشفرة في التجزئة.جرب العرض التوضيحي!

هتافات!


حول هذه المشكلة في IE:لم أكن أدرك أن هذا الحل القائم على "التجزئة" لا يعمل على IE (مطور Linux القديم الفقير).

لكن بالنسبة إلى IE، يمكنك استخدام إطار iframe مخفي، واستخدام خاصية "عنوان URL يؤثر على السجل" لتنفيذ السجل.أعلم أن هذا البيان يفتقر إلى التفاصيل، ولكن هذا نابع من قلة خبرتي في استخدام IE.

سأجرب هذا الحل وأتابعه :)

لقد عثرت على مجموعة من الروابط على الإنترنت، والتي تنفذ عمليات التنفيذ المناسبة للسجل باستخدام إطارات iframe/تجزئة الموقع.لم يكن لدي الصبر للبحث عن الاختلافات بين واجهة iframe على المتصفحات المختلفة.

أعتقد أنني أفضل البرنامج المساعد مسج.لدى YUI مدير للتاريخ أيضًا.

هتافات!

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