2010-09-23 16 views
18

इसलिए जब पृष्ठ रीफ्रेश हो जाता है या उपयोगकर्ता भविष्य के उपयोग के लिए पृष्ठ से बाहर निकलता है तो मैं ब्राउज़र के स्थानीय स्टोरेज में कुछ जानकारी संग्रहीत करना चाहता हूं। मुझे लगा कि मैं घटना का पता लगाने और पेज विज़िट की स्थिति को स्टोर करने के लिए कुछ जावास्क्रिप्ट का उपयोग करूंगा।जावास्क्रिप्ट प्रश्न: Onbeforeunload या Onunload?

अब मेरी स्थिति यह है: क्या मैं इस उद्देश्य को पूरा करने के लिए Onbeforeunload या Onunload विधि का उपयोग करूंगा?

धन्यवाद

+0

देखने ब्राउज़र समर्थन https://developer.mozilla.org/en-US/docs/WindowEventHandlers.onbeforeunload#Browser_compatibility –

+0

https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers.onunload#Browser_compatibility (ध्यान दें कि ब्राउज़र संस्करण इस दस्तावेज़ में निर्दिष्ट नहीं हैं) पर 'onunload' WindowEventHandler का ब्राउज़र समर्थन देखें) –

+0

संबंधित http://stackoverflow.com/questions/158673/onbeforeunload-support-detection –

उत्तर

20

क्यों सुरक्षित पक्ष पर रहने के लिए इसे पंजीकृत न करें? बस श्रोता अभी यह जांचने के लिए जांच करें कि क्या डेटा अभी तक संग्रहीत है और जल्दी से बाहर निकलें।

यहाँ घटना गुणों का उपयोग करके एक त्वरित उदाहरण है:

window.onunload = window.onbeforeunload = (function(){ 

    var didMyThingYet=false; 

    return function(){ 
    if (didMyThingYet) return; 
    didMyThingYet=true; 
    // do your thing here... 
    } 

}()); 

या आप attachEvent इस्तेमाल कर सकते हैं:

(function(){ 

    var didMyThingYet=false; 

    function listener(){ 
    if (didMyThingYet) return; 
    didMyThingYet=true; 
    // do your thing here... 
    } 

    window.attachEvent("onbeforeunload", listener); 
    window.attachEvent("onunload", listener);  

}()); 
+1

यह सभी अड्डों को कवर करने के लिए एक व्यावहारिक विचार की तरह लगता है। यह भव्य होगा अगर आप मुझे स्निपेट या संसाधन के रूप में इंगित कर सकते हैं जहां तक ​​ईवेंट श्रोता और जल्दी से बाहर निकलता है। स्निपेट के लिए – pratyk

+0

धन्यवाद। मैंने इसे विंडोज़ और मैक ओएस क्रोम/फ़ायरफ़ॉक्स में बाहर करने की कोशिश की और यह सभी अड्डों को कवर करना प्रतीत होता था। ओपेरा और आईई 9 बीटा के लिए थोड़ा और परीक्षण मुझे चलाना चाहिए। – pratyk

0

मुझे विश्वास है कि Onbeforeunload एक सुरक्षित शर्त है। ब्राउजर के लिए ऑननलोड स्क्रिप्ट को पूरी तरह से निष्पादित करना संभव नहीं है - उदाहरण के लिए, अगर आपको ऑनलोड में अलर्ट है, तो क्रोम विंडो को बंद करने पर नहीं दिखाएगा।

+3

मै मैक ओएस एक्स पर क्रोम बनाम 5 और 6 का परीक्षण किया और यह ऑनयूनल पर अलर्ट करता है। मेरी इच्छा है कि एक मैट्रिक्स/चार्ट था जो प्रत्येक ब्राउज़र के लिए डीओएम समर्थन सूचीबद्ध करेगा। धन्यवाद। – pratyk

8

यह करने के लिए उचित जगह ऑनअनलोड है। onbeforenload का उपयोग तब किया जाता है जब आपको उपयोगकर्ता को पृष्ठ छोड़ने से रोकने की आवश्यकता हो सकती है, जैसे कि सहेजे गए डेटा होने पर।

मैं सभी मामलों को कवर करने के लिए कोड लिखने से थक गया हूं क्योंकि आप सभी मामलों का परीक्षण करने के इच्छुक नहीं हैं। यदि आप अपना शोध करते हैं और पाते हैं कि यह ब्राउज़र में बहुत जटिल है, हाँ, आगे बढ़ें और जितना संभव हो उतना करें। हालांकि, मुझे विश्वास है कि स्थानीय स्टोरेज ऑनलोड लोड करने में कोई समस्या नहीं है। मैंने सर्वर पर ऑनलोड को जानकारी भेजने की कोशिश कर, वास्तव में एक समस्या में भाग लिया। यह ब्राउज़र में भरोसेमंद नहीं हुआ, इसलिए मैंने एक ऐसे दृष्टिकोण के साथ समाप्त किया जो अनलोड और पहले से लोड दोनों का उपयोग करता था, लेकिन केवल उचित परिश्रम के बाद।

तो मेरा सुझाव यह है कि यह ऑनलोड हो, अपने सभी ब्राउज़रों की जांच करें।

+0

+1 इसे दोनों के साथ आज़माएं और क्रोम 'onbeforeunload' के साथ एक बदसूरत संवाद उठाता है यदि आप इसके अंदर' indexedDB.deleteDatabase' 'कहते हैं, लेकिन' ऑनलोड 'के अंदर एक ही कॉल करना खुश है। –

0

मेरे अनुभव से: onunload का उपयोग करें क्योंकि ओपेरा अन्य घटना का समर्थन नहीं करता है। हाँ, मुझे पता है ... ओपेरा ... लेकिन अभी भी :)

`WindowEventHandler onbeforeunload` पर की
+0

अपडेट: ओपेरा अब वी 8 का उपयोग करता है :) –

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