12

क्या स्टैक ओवरफ़्लो से नीचे दिए गए एक की तरह विंडो के लिए कैप्चर करने का कोई तरीका है (प्रश्न पूछे बिना 'प्रश्न पूछें' पृष्ठ छोड़ते समय ऐसा होता है)?window.onbeforeunload पुष्टिकरण संवाद का परिणाम कैप्चरिंग

क्रोम में यह कैसा दिखाई देता है, मेरा मानना ​​है कि यह अन्य ब्राउज़रों में थोड़ा अलग है, लेकिन आपके पास हमेशा कुछ हां/नहीं बटन हैं।

window.onbeforeunload confirmation dialog

मुमकिन है अगर वे हमलावर पृष्ठ पर हों बाद घटना ट्रिगर की जा रही है कि वे रहने के लिए चुना है और आप शायद js के अनुक्रम को देख कर यह पता लगा सकता है। हालांकि मैं जानना चाहता हूं कि यह निर्धारित करने के लिए कि क्या उन्होंने "इस पृष्ठ को छोड़ दें" पर क्लिक किया है?

मैं नीचे की तरह इस क्रियान्वित किया है:

// concept taken from SO implementation 
function setConfirmUnload(showMessage, message) { 
    window.onbeforeunload = showMessage ? (message ? message : "this is a default message") : null; 
} 

// pseudo code 
listen to changes on inputs 
if any inputs fire a change event 
    call setConfirmUnload(true, 'My warning message') 

टिप्पणी मैं अपने साइट के भीतर jQuery उपयोग कर रहा हूँ।

मैं अनिवार्य रूप से एक जीमेल को कार्यान्वित करने की कोशिश कर रहा हूं जैसे ड्राफ्टिंग कार्यान्वयन, जिसमें यदि कोई उपयोगकर्ता किसी फॉर्म के साथ एक पृष्ठ छोड़ देता है तो उन्होंने बिना किसी सहेजने में बदलाव किए हैं, वे एक समान संवाद से गर्म हो जाते हैं। अगर वे त्यागना चुनते हैं तो वे परिवर्तन कर रहे हैं और पृष्ठ छोड़ते हैं, मुझे डेटाबेस से कुछ अस्थायी रिकॉर्ड साफ़ करने की आवश्यकता है (मैं एक AJAX कॉल सोच रहा हूं, या बस delete ध्वज के साथ फ़ॉर्म सबमिट कर रहा हूं) फिर उन्हें अपने रास्ते पर भेजना ।

मेरा प्रश्न भी संबंधित है:

jQuery AJAX call in onunload handler firing AFTER getting the page on a manual refresh. How do I guarantee onunload happens first?

उत्तर

3

आप बाहर निकलें पुष्टि window.onbeforeunload का उपयोग कर हो सकता है लेकिन वहाँ जो बटन उपयोगकर्ता ने क्लिक किया पता लगाने के लिए एक तरीका नहीं है।

jvenema from this thread से पहले के एक प्रतिक्रिया के शब्दों में:

beforeunload के लिए प्राथमिक उद्देश्य उनके परिवर्तन खो रहे हैं इससे पहले कि परिवर्तन सहेजने के लिए उपयोगकर्ताओं को विकल्प की अनुमति देता है जैसी चीजों के लिए है।

इसके अलावा, अपने उपयोगकर्ताओं को छोड़ रहे हैं अगर, यह पहले से ही बहुत देर हो चुकी [...]

+5

परीक्षण करने के लिए क्या उपयोगकर्ता क्लिक किया: मैं एक सफल समाधान नहीं मिला '' 'window.onfocus()' '' का उपयोग कर। जब उपयोगकर्ता STAY पर क्लिक करता है तो वह फ़ंक्शन ट्रिगर हो जाएगा, और पृष्ठ पर वापस आ जाएगा। हालांकि, ध्यान दें कि टैब, विंडो इत्यादि बदलते समय ऑनफोकस() भी ट्रिगर किया जाएगा। उपयोगकर्ता को कहां से आ रहा है/कैप्चर करने में सक्षम होने के लिए onbeforeunload() में एक वैश्विक चर सेट करें। यदि उपयोगकर्ता पृष्ठ छोड़ना चाहता है, तो आप '' 'window.onunload()' '' – GDmac

+0

में कुछ अंतिम सामान कर सकते हैं। Window.onfocus चाल फ़ायरफ़ॉक्स और मेरे लिए क्रोम (केवल आईई) में काम नहीं करती है, लेकिन मैं पाया गया कि 'preunload' हैंडलर में setTimeout का उपयोग करना (यदि उपयोगकर्ता ने पृष्ठ पर रहने का विकल्प चुना है तो कुछ कोड चलाने के लिए) काम किया। आप यहां एक कामकाजी उदाहरण देख सकते हैं: https://jsfiddle.net/nathanbedford/uscobrm0/10/ –

7

कैसे इस बारे में:

$(window).bind('beforeunload' , function(event) { 
    setTimeout(function() { 
     alert('Hi againe!'); 
    }); 
    return ''; 
}).bind('unload', function(event) { 
    alert('Goodby!'); 
}); 
+0

यह वास्तव में इसे काट नहीं देता है ... यहां तक ​​कि स्थानीयहोस्ट पर भी इसे 'पहले से लोड' और ' unload'। एक धीमी कनेक्शन पर भी 500 एमएमएस देरी बहुत कम हो सकती है। – Sjeiti