इतिहास API - स्क्रोल बहाल करें

अपने यूआरएल को मैनेज करने के लिए, इतिहास API का इस्तेमाल करना शानदार है. साथ ही, यह अच्छे वेब ऐप्लिकेशन की एक अहम सुविधा है. हालांकि, इसका एक नुकसान यह भी है कि स्क्रोल करने की पोज़िशन सेव की जाती है. इसके बाद, इतिहास को देखने पर, पेज को वापस लाया जाता है. अक्सर इसका मतलब है कि पेज में स्क्रोल करने की जगह अपने-आप बदलने पर, वह गलत तरीके से यूं ही जा सकता है. खास तौर पर, ऐसा तब होता है, जब आपका ऐप्लिकेशन ट्रांज़िशन करता हो या पेज के कॉन्टेंट में किसी भी तरह का बदलाव करता हो. आखिरकार, इससे उपयोगकर्ताओं को बहुत खराब अनुभव मिलता है.

स्थिति को और भी खराब बनाने के लिए, आप बहुत कम कार्रवाइयां कर सकते हैं: Chrome, scroll इवेंट से पहले popState इवेंट ट्रिगर करता है. इसका मतलब है कि आप popState में स्क्रोल की मौजूदा जगह को पढ़ सकते हैं और फिर window.scrollTo (Ewww, लेकिन कम से कम यह काम करता है!) की मदद से scroll इवेंट हैंडलर में उसे उलटा कर सकते हैं. हालांकि, Firefox scroll इवेंट को popState से पहले ट्रिगर करता है, ताकि आपको पता न चले कि उसे वापस लाने के लिए पुरानी स्क्रोल वैल्यू क्या थी. ओह!

हालांकि, अच्छी खबर यह है कि एक संभावित सुधार किया जा सकता है: history.scrollRestoration. इसमें दो स्ट्रिंग वैल्यू होती हैं: auto में सब कुछ पहले जैसा ही रहता है (और यह इसकी डिफ़ॉल्ट वैल्यू है). manual का मतलब है कि स्क्रोल में होने वाले ऐसे किसी भी बदलाव का मालिकाना हक आपको डेवलपर के तौर पर मिल जाएगा जो उपयोगकर्ता को ऐप्लिकेशन का इतिहास देखते समय ज़रूरी हो सकता है. अगर आप चाहें, तो history.pushState() की मदद से इतिहास की एंट्री पुश करते समय, स्क्रोल की पोज़िशन पर नज़र रखी जा सकती है.

यह सुविधा नई है और इसे अभी आज़माया जा रहा है. हालांकि, यह काफ़ी शानदार है. इसलिए, इसका इस्तेमाल करने से पहले देख लें कि यह सुविधा उपलब्ध है या नहीं:

if ('scrollRestoration' in history) {
    // Back off, browser, I got this...
    history.scrollRestoration = 'manual';
}

आपको Chrome 46 और उसके बाद के वर्शन में history.scrollRestoration मिलेगा. इसकी खास जानकारी यहां मिलेगी.

हमें अपने सुझाव ज़रूर भेजें. साथ ही, दूसरे वेंडर को भी यह जानकारी दें कि वे भी scrollRestoration की मदद करें.