दिलचस्प पोस्ट
कहाँ मॉलोक () / मुक्त () स्टोर आवंटित आकार और पते? डेटाग्रीड दृश्य (द्वितीय स्तर गुण) में एक नेविगेशन प्रॉपर्टी की गुण दिखाएं फिक्सिंग फ़ाइल 'प्रोजेक्ट.pch' को संशोधित कर दिया गया है क्योंकि एक्सकॉम्प में प्रीकंपमेट किए गए हेडर को त्रुटि बनाया गया था एल्गोरिथ्म अनाग्राम उत्पन्न करने के लिए मैं jquery का उपयोग करके एक पेज रीफ्रेश कैसे खोज सकता हूं? "एंड्रॉइड" पैकेज में विशेषता 'शोएएसएक्शन' के लिए कोई संसाधन पहचानकर्ता नहीं मिला आईओएस 7 में पृष्ठभूमि स्थान सेवाएं काम नहीं कर रही हैं परियोजना बिल्ड पर कोकाओपोड की त्रुटियां मैं कैसे AngularJS में सीएसएस शैलियों को लागू कर सकता हूं? पायथन (विंडोज़) – आयातईटर: साइट का कोई मॉड्यूल नहीं है GUID / UUID डेटाबेस कुंजियों के फायदे और नुकसान जब आप सी ++ 11 में && हैं, तो आप std :: स्थान का उपयोग क्यों करते हैं? .NET डेटा संरचनाएं: सरणी सूची, सूची, हैशटेबल, डिक्शनरी, सॉर्टेड सूची, सॉर्टेडेडडेशन – स्पीड, मेमोरी, और प्रत्येक का उपयोग कब किया जाए? ऑपरेटर == को सामान्य प्रकार के सी # में लागू नहीं किया जा सकता है? एक गिट शाखा की मूल शाखा खोजें

कैसे ब्राउज़र खिड़की बंद घटना पर कब्जा करने के लिए?

मैं ब्राउज़र विंडो / टैब बंद होने की घटना को कैप्चर करना चाहता हूं मैंने निम्नलिखित के साथ jQuery का प्रयास किया है:

jQuery(window).bind( "beforeunload", function() { return confirm("Do you really want to close?") } ) 

लेकिन यह फॉर्म सबमिशन पर भी काम करता है, जो कि मैं नहीं चाहता हूं। मैं एक ऐसा ईवेंट चाहता हूं जो प्रयोक्ता द्वारा विंडो को बंद कर देता है।

Solutions Collecting From Web of "कैसे ब्राउज़र खिड़की बंद घटना पर कब्जा करने के लिए?"

जब भी उपयोगकर्ता आपके पृष्ठ को किसी भी कारण से छोड़ देता है, तब से beforeunload होने वाली घटना का आग लग जाता है।

उदाहरण के लिए, यदि उपयोगकर्ता एक फ़ॉर्म सबमिट करता है, एक लिंक पर क्लिक करता है, विंडो (या टैब) को बंद कर देता है, या पता पट्टी, खोज बॉक्स या बुकमार्क का उपयोग करके एक नया पृष्ठ चला जाता है, तो यह निकाल दिया जाएगा।

आप नीचे दिए गए कोड के साथ फ़ॉर्म सबमिशन और हाइपरलिंक (अन्य फ़्रेमों को छोड़कर) को बाहर कर सकते हैं:

 var inFormOrLink; $('a').on('click', function() { inFormOrLink = true; }); $('form').on('submit', function() { inFormOrLink = true; }); $(window).on("beforeunload", function() { return inFormOrLink ? "Do you really want to close?" : null; }) 

1.7 से पुराने jQuery संस्करणों के लिए, यह प्रयास करें:

 var inFormOrLink; $('a').live('click', function() { inFormOrLink = true; }); $('form').bind('submit', function() { inFormOrLink = true; }); $(window).bind("beforeunload", function() { return inFormOrLink ? "Do you really want to close?" : null; }) 

live इवेंट submit ईवेंट के साथ काम नहीं करता है, इसलिए यदि आप एक नया फॉर्म जोड़ते हैं, तो आपको इसके साथ ही हेन्डलर को भी बाँधना होगा।

ध्यान दें कि यदि एक अलग ईवेंट हैंडलर सबमिट या नेविगेशन को रद्द करता है, तो यदि आप वास्तव में विंडो को बाद में बंद कर देते हैं, तो आप पुष्टि का संकेत खो देंगे आप इसे तय कर सकते हैं कि समय submit click और ईवेंट पर click , और यह जांच कर लें कि पहले से beforeunload होने में कुछ सेकंड बाद भी अधिक होता है।

हो सकता है कि फ़ॉर्म के beforeunload हैंडलर submit करने से beforeunload केवल beforeunload ईवेंट beforeunload हेन्डलर को अनबाइंड करें:

 jQuery('form').submit(function() { jQuery(window).unbind("beforeunload"); ... }); 

क्रॉस-ब्राउज़र समाधान के लिए (क्रोम 21, आईई 9, एफएफ 15 में परीक्षण किया गया है), निम्न कोड का उपयोग करने पर विचार करें, जो स्लप्स कोड का एक थोड़ा छूटा हुआ संस्करण है:

 var inFormOrLink; $('a').live('click', function() { inFormOrLink = true; }); $('form').bind('submit', function() { inFormOrLink = true; }); $(window).bind('beforeunload', function(eventObject) { var returnValue = undefined; if (! inFormOrLink) { returnValue = "Do you really want to close?"; } eventObject.returnValue = returnValue; return returnValue; }); 

ध्यान दें कि Firefox 4 के बाद से, "क्या आप वास्तव में बंद करना चाहते हैं?" प्रदर्शित नहीं किया गया है एफएफ बस एक सामान्य संदेश प्रदर्शित करता है https://developer.mozilla.org/en-US/docs/DOM/window.onbeforeunload में नोट देखें

 window.onbeforeunload = function () { return "Do you really want to close?"; }; 

ऐसे समाधान के लिए जो तीसरी पार्टी के नियंत्रण के साथ अच्छी तरह से काम किया, जैसे टेलरिक (उदा .: रेडकोम्बोबॉक्स) और देव एक्सप्रेस, जो विभिन्न कारणों से एंकर टैग का उपयोग करते हैं, निम्न कोड का उपयोग करने पर विचार करें, जो कि डेम के कोड का एक थोड़ा तुच्छ संस्करण है जो स्वयं के लिए बेहतर चयनकर्ता है एंकर टैग को लक्षित करना:

 var inFormOrLink; $('a[href]:not([target]), a[href][target=_self]').live('click', function() { inFormOrLink = true; }); $('form').bind('submit', function() { inFormOrLink = true; }); $(window).bind('beforeunload', function(eventObject) { var returnValue = undefined; if (! inFormOrLink) { returnValue = "Do you really want to close?"; } eventObject.returnValue = returnValue; return returnValue; }); 

मैंने स्काक्स का उत्तर प्रयोग किया था लेकिन वह काम नहीं कर रहा था, क्योंकि ऑनबेयरनलोड रिटर्न वैल्यू को स्ट्रिंग के रूप में पार्स किया जाता है और ब्राउज़र के पुष्टिकरण बॉक्स में प्रदर्शित होता है। तो सच मान प्रदर्शित किया गया था, जैसे "सच"

सिर्फ वापसी का उपयोग करके काम किया यहाँ मेरा कोड है

 var preventUnloadPrompt; var messageBeforeUnload = "my message here - Are you sure you want to leave this page?"; //var redirectAfterPrompt = "http://www.google.co.in"; $('a').live('click', function() { preventUnloadPrompt = true; }); $('form').live('submit', function() { preventUnloadPrompt = true; }); $(window).bind("beforeunload", function(e) { var rval; if(preventUnloadPrompt) { return; } else { //location.replace(redirectAfterPrompt); return messageBeforeUnload; } return rval; }) 

शायद आप ऑनसब्मिट को प्रबंधित कर सकते हैं और एक झंडा निर्धारित कर सकते हैं जिसे आप बाद में अपने ऑनबर्नउन्नोल्ड हैंडलर में जांचते हैं।

 jQuery(window).bind( "beforeunload", function (e) { var activeElementTagName = e.target.activeElement.tagName; if (activeElementTagName != "A" && activeElementTagName != "INPUT") { return "Do you really want to close?"; } }) 

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

ग्राहक को टैब बंद करने से पहले आप कुछ छोटी चीजें कर सकते हैं जावास्क्रिप्ट ब्राउजर बंद टैब / बंद ब्राउजर का पता लगाता है लेकिन अगर आपकी क्रिया की सूची बड़ा है और टैब समाप्त होने से पहले बंद हो जाता है तो आप असहाय हैं। आप इसे आज़मा सकते हैं लेकिन मेरे अनुभव के साथ इस पर निर्भर नहीं है।

 window.addEventListener("beforeunload", function (e) { var confirmationMessage = "\o/"; /* Do you small action code here */ (e || window.event).returnValue = confirmationMessage; //Gecko + IE return confirmationMessage; //Webkit, Safari, Chrome }); 

https://developer.mozilla.org/en-US/docs/Web/Reference/Events/beforeunload?redirectlocale=en-US&redirectslug=DOM/Mozilla_event_reference/beforeunload

मेरा जवाब सरल बेंचमार्क प्रदान करने के उद्देश्य से है

कैसे

@Slaks उत्तर देखें।

 $(window).on("beforeunload", function() { return inFormOrLink ? "Do you really want to close?" : null; }) 

आखिरकार आपके पेज को बंद करने के लिए ब्राउज़र कितनी देर तक ले जाता है?

जब भी कोई उपयोगकर्ता पृष्ठ बंद कर देता है ( एक्स बटन या CTRL + W ), ब्राउज़र दिए गए beforeunload कोड को निष्पादित करता है, लेकिन अनिश्चित काल तक नहीं। एकमात्र अपवाद पुष्टिकरण बॉक्स है ( return 'Do you really want to close? ) जो उपयोगकर्ता की प्रतिक्रिया तक इंतजार करेंगे।

क्रोम : 2 सेकंड
फ़ायरफ़ॉक्स : ∞ (या डबल क्लिक करें, या बंद पर बल)
एज : ∞ (या डबल क्लिक)
एक्सप्लोरर 11 : 0 सेकंड
सफारी : TODO

हम इस का परीक्षण करते थे:

  • अनुरोध लॉग के साथ एक Node.js एक्सप्रेस सर्वर
  • निम्न लघु HTML फ़ाइल

यह कई अनुरोधों को भेजने के लिए है, जैसा कि ब्राउज़र ब्राउज़र के बंद होने से पहले हो सकता है (synchronously)।

 <html> <body> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> <script> function request() { return $.ajax({ type: "GET", url: "http://localhost:3030/" + Date.now(), async: true }).responseText; } window.onbeforeunload = () => { while (true) { request(); } return null; } </script> </body> </html> 

क्रोम आउटपुट:

 GET /1480451321041 404 0.389 ms - 32 GET /1480451321052 404 0.219 ms - 32 ... GET /hello/1480451322998 404 0.328 ms - 32 1957ms ≈ 2 seconds // we assume it's 2 seconds since requests can take few milliseconds to be sent. 

यदि आपका प्रपत्र सबमिशन उन्हें किसी अन्य पेज पर ले जाता है (जैसा कि मैं मानता हूं कि ऐसा होता है, इसलिए इससे पहले ट्रिगर beforeunload ), आप अपने फॉर्म को beforeunload कॉल में जमा करने की कोशिश कर सकते हैं। इस तरह, जब वे फॉर्म सबमिट करते हैं, तो वे आपके पेज को नहीं छोड़ेंगे और आप अपनी इच्छा से पहले अपनी बाइंडिंग कोड का उपयोग कर सकते हैं।

मेरा अंक: 'ऑनबीअनूनलोड' ईवेंट केवल तभी शुरू किया जाएगा, यदि सबमिट की अजीब संख्या (क्लिक) हो। मेरे समाधान का काम करने के लिए मेरे समान समाधान से समाधान का एक संयोजन था। अच्छी तरह से मेरा कोड बोलेंगे

 <!--The definition of event and initializing the trigger flag---> $(document).ready(function() { updatefgallowPrompt(true); window.onbeforeunload = WarnUser; } function WarnUser() { var allowPrompt = getfgallowPrompt(); if(allowPrompt) { saveIndexedDataAlert(); return null; } else { updatefgallowPrompt(true); event.stopPropagation } } <!--The method responsible for deciding weather the unload event is triggered from submit or not---> function saveIndexedDataAlert() { var allowPrompt = getfgallowPrompt(); var lenIndexedDocs = parseInt($('#sortable3 > li').size()) + parseInt($('#sortable3 > ul').size()); if(allowPrompt && $.trim(lenIndexedDocs) > 0) { event.returnValue = "Your message"; } else { event.returnValue = " "; updatefgallowPrompt(true); } } <!---Function responsible to reset the trigger flag----> $(document).click(function(event) { $('a').live('click', function() { updatefgallowPrompt(false); }); }); <!--getter and setter for the flag----> function updatefgallowPrompt (allowPrompt){ //exit msg dfds $('body').data('allowPrompt', allowPrompt); } function getfgallowPrompt(){ return $('body').data('allowPrompt'); } 

JQuery 1.7 के रूप में, .live () विधि नापसंद है। ईवेंट हैंडलर को संलग्न करने के लिए .on () का उपयोग करें JQuery के पुराने संस्करणों के उपयोगकर्ता का उपयोग करना चाहिए .delegate () पसंद करने के लिए .live ()

 $(window).bind("beforeunload", function() { return true || confirm("Do you really want to close?"); }); 

पूर्ण या लिंक पर

 $(window).unbind(); 

बस सत्यापित करें …

 function wopen_close(){ var w = window.open($url, '_blank', 'width=600, height=400, scrollbars=no, status=no, resizable=no, screenx=0, screeny=0'); w.onunload = function(){ if (window.closed) { alert("window closed"); }else{ alert("just refreshed"); } } } 

यह भी प्रयास करें

 window.onbeforeunload = function () { if (pasteEditorChange) { var btn = confirm('Do You Want to Save the Changess?'); if(btn === true ){ SavetoEdit();//your function call } else{ windowClose();//your function call } } else { windowClose();//your function call } }; 
 var validNavigation = false; jQuery(document).ready(function () { wireUpEvents(); }); function endSession() { // Browser or broswer tab is closed // Do sth here ... alert("bye"); } function wireUpEvents() { /* * For a list of events that triggers onbeforeunload on IE * check http://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx */ window.onbeforeunload = function () { debugger if (!validNavigation) { endSession(); } } // Attach the event keypress to exclude the F5 refresh $(document).bind('keypress', function (e) { debugger if (e.keyCode == 116) { validNavigation = true; } }); // Attach the event click for all links in the page $("a").bind("click", function () { debugger validNavigation = true; }); // Attach the event submit for all forms in the page $("form").bind("submit", function () { debugger validNavigation = true; }); // Attach the event click for all inputs in the page $("input[type=submit]").bind("click", function () { debugger validNavigation = true; }); }`enter code here` 

निम्नलिखित मेरे लिए काम किया;

  $(window).unload(function(event) { if(event.clientY < 0) { //do whatever you want when closing the window.. } });