2009-09-10 12 views
16

जीमेल # का उपयोग करता है जब आप पृष्ठ को अलग करने के लिए मेल पर क्लिक करते हैं (+ अजाक्स एक्शन)। http://mail.google.com/mail/#inbox/1238e709e37a1394जीमेल कैसे रीफ्रेश किए बिना आईई बैक काम करता है?

मैंने पाया: Google using # instead of search? in URL. Why?

एफएफ या क्रोम आप उन यूआरएल के बीच ताज़ा बिना आगे और पीछे का उपयोग कर सकते हैं: http://X.com/MyPage.aspx#1 http://X.com/MyPage.aspx#2 http://X.com/MyPage.aspx#3

लेकिन IE पर पृष्ठ ताज़ा और ऐसा नहीं जब पिछली कार्रवाई की जाती है तो # के बाद परम गिनें।

जीमेल कैसे जादू करता है?

+1

+1 अधिक लोगों को इस पैटर्न में वेब एप्लिकेशन डिजाइन के बारे में पता होना चाहिए: http://nix.lv/history/demo.html#3

पर यह मिला! रोचक जानकारी के लिए – jrharshath

उत्तर

13

मैं आपको इसका उत्तर दे सकता हूं, क्योंकि मैंने इस समस्या का सामना किया है और हल किया है।

कुछ अवधारणाओं यहाँ पहली बार समझने के लिए कर रहे हैं:

  1. जावास्क्रिप्ट सीधे ब्राउज़र इतिहास बदल नहीं सकते।
  2. जब भी पृष्ठ में आईफ्रेम का मूल URL बदलता है, तो इतिहास अपडेट हो जाता है। (लेकिन इसमें विभिन्न ब्राउज़रों के साथ कुछ quirks है)।
  3. यूआरएल में "हैश" भाग है: उदाहरण के लिए, यूआरएल http://mail.google.com/mail#inbox में, #inbox हैश किया गया हिस्सा है। चलिए इसे "हैश" कहते हैं। इसलिए http://mail.google.com/mail हमारा "मूल URL" होगा।

जीमेल द्वारा ट्रैकिंग इतिहास मुख्य रूप से इस "हैश" के आधार पर चाल का उपयोग करके किया जाता है।

तो, कुछ और अवधारणाओं:

  1. जब पता बार परिवर्तन में यूआरएल, इतिहास अद्यतन हो जाता है (पिछले URL के इतिहास में चला जाता है)
  2. आधार URL बदल जाती है जब, पेज पुनः लोड किया गया है।
  3. जब यूआरएल का हैश हिस्सा बेस यूआरएल बदलने के बिना बदलता है, पेज को पुनः लोड नहीं किया जाता है।

इसलिए, जब आप http://mail.google.com/mail#inbox से http://mail.google.com/mail#sent पर जाते हैं, पेज ताजा नहीं मिलता है।

अब, अगर हैश बदल गया है तो जीमेल को इवेंट अधिसूचना मिलनी थी, तो जीमेल उस पर आधारित कार्रवाई कर सकता था। दुर्भाग्यवश, कोई डोम घटनाएं नहीं हैं जो इतिहास कार्यों को पकड़ने में हमारी सहायता कर सकती हैं। तो इसके बजाय (यह वह हिस्सा है जो दिखाता है कि मैंने समस्या को कैसे पार किया), हम एक अनंत लूप चलाते हैं जो हैश में परिवर्तनों की जांच करता है। यदि यह कोई परिवर्तन देखता है, तो हम ब्राउज़र के "बैक" या "फॉरवर्ड" बटन पर क्लिक का पता लगाते हैं।

इसे हल करने में, मैंने एक आसान टूल बनाया: URL parser। यह यूआरएल में जीईटी पैरा, साथ ही साथ हैश में एन्कोड किए गए पैराम्स को पार्स कर सकता है। डेमो को जाने दो!

चीयर्स!


IE में इस समस्या के बारे में: मुझे नहीं पता था कि यह 'हैश' आधारित समाधान आईई (गरीब पुराने linux डेवलपर) पर काम नहीं करता।

लेकिन आईई के लिए, आप एक छिपे हुए आईफ्रेम का उपयोग कर सकते हैं और इतिहास को लागू करने के लिए "यूआरएल इतिहास को प्रभावित करता है" संपत्ति का उपयोग कर सकते हैं। मुझे पता है कि इस कथन में विवरण की कमी है, लेकिन यह आईई के साथ अनुभव की अपनी कमी से उत्पन्न होता है।

मैं इस समाधान का प्रयास करें और :)

अनुवर्ती मैं इंटरनेट पर लिंक के एक मेजबान, कि iframes/स्थान हैश का उपयोग कर इतिहास के समुचित कार्यान्वयन कर पाया होगा। मेरे पास विभिन्न ब्राउज़रों पर आईफ्रेम इंटरफ़ेस के बीच मतभेद खोदने का धैर्य नहीं था।

मुझे लगता है कि मैं jquery plugin पसंद करूंगा। यूयूआई का इतिहास प्रबंधक भी है।

चीयर्स!

+0

+1, लेकिन मुझे यह नहीं पता कि यह आईई में वापस/आगे जाने के साथ विशिष्ट समस्या से कैसे संबंधित है। – Kamarey

+0

उत्तर के लिए धन्यवाद। लेकिन आईई पर अगर यूआरएल है: 1. [एक्स.एएसपीएक्स] 2. [एक्स.एएसपीएक्स # ए] 3. [एक्स.एएसपीएक्स # बी] फिर वापस दबाएं: यह 1 [एक्स.एएसपीएक्स] और पेज रीफ्रेश पर जाएगा , नहीं 2. मैं आईई पर बैक कैसे बना सकता हूं 2 [X.aspx # ए] और पृष्ठ ताज़ा किए बिना? जीमेल पर पसंद है। – SirMoreno

+0

ठीक है, यह एक ऐसा क्षेत्र है जहां मैंने पूरी तरह से शोध नहीं किया है। लेकिन कुछ सुझाव हैं जिनका आप उपयोग कर सकते हैं। उन्हें जवाब में जोड़ना ... – jrharshath

संबंधित मुद्दे