जब मैं पहले से देखे गए पृष्ठ तक पहुँचने के लिए फ़ायरफ़ॉक्स पर बैक बटन का उपयोग करता हूँ, तो उस पृष्ठ पर स्क्रिप्ट फिर से नहीं चलेगी।
यह सही है और यह अच्छी बात है।
जब आप फ़ायरफ़ॉक्स (और सफारी, और ओपेरा) में एक लिंक हिट करते हैं, तो यह अगले पेज पर जाने के लिए तुरंत आपके पेज को नष्ट नहीं करता है। यह पृष्ठ को बरकरार रखता है, केवल इसे देखने से छिपाता है। क्या आपको बैक बटन मारना चाहिए, यह फिर से दस्तावेज़ को लोड किए बिना, पुराने पेज को फिर से दृश्य में लाएगा; यह बहुत तेज़ है, जिसके परिणामस्वरूप उपयोगकर्ता के लिए स्मूथ बैक / फॉरवर्ड पेज ट्रांज़िशन होता है।
इस सुविधा को bfcache कहा जाता है ।
उपयोगकर्ता के पिछले लोड और इसके उपयोग के दौरान आपके द्वारा पृष्ठ पर जोड़ी गई कोई भी सामग्री अभी भी रहेगी। आपके द्वारा पृष्ठ तत्वों से जुड़े किसी भी ईवेंट हैंडलर को अभी भी संलग्न किया जाएगा। आपके द्वारा निर्धारित कोई भी टाइमआउट / अंतराल अभी भी सक्रिय रहेगा। इसलिए शायद ही कोई कारण है कि आपको यह जानने की आवश्यकता है कि आपको छिपाया गया है और फिर से दिखाया गया है। onloadफिर से स्क्रिप्ट कोड को कॉल या इनलाइन करना गलत होगा , क्योंकि उस फ़ंक्शन में आपके द्वारा किया गया कोई भी बाइंडिंग और कॉन्टेंट जेनरेशन संभावित रूप से विनाशकारी परिणामों के साथ, उसी सामग्री पर दूसरी बार निष्पादित होगा। (जैसे; document.writeइनलाइन स्क्रिप्ट पेज को पूरी तरह से नष्ट कर देगी।)
window.onunloadप्रभाव लिखने का कारण यह है कि bfcache को लागू करने वाले ब्राउज़रों ने निर्णय लिया है कि - उन पृष्ठों के साथ संगतता के लिए जिन्हें वास्तव में जानने की आवश्यकता है कि उन्हें कब छोड़ा जा रहा है - ऐसा कोई भी पृष्ठ जो यह जानने में रुचि रखता है कि onunloadऐसा होने पर bfcache किसके कारण होगा विकलांग होना। उस पृष्ठ को नए सिरे से लोड किया जाएगा जब आप bfcache से प्राप्त होने के बजाय, उस पर वापस जाते हैं।
इसलिए यदि आप सेट करते हैं window.onunload= function() {};, तो आप वास्तव में क्या कर रहे हैं जानबूझकर bfcache तोड़ रहा है। यह आपके पृष्ठों को नेविगेट करने में धीमा होगा, और अंतिम उपाय के अलावा इसका उपयोग नहीं किया जाना चाहिए।
यदि आपको यह जानने की आवश्यकता है कि उपयोगकर्ता आपके पेज पर कब जाता है या आपके पेज पर वापस आता है, तो bfcache को गड़बड़ किए बिना, आप इसके बजाय ईवेंट onpageshowऔर onpagehideघटनाओं को फंसा सकते हैं :
window.onload=window.onpageshow= function() {
alert('Hello!');
};