2008-09-26 12 views
12

जब कोई पॉपअप विंडो बंद हो जाती है, या अधिमानतः, बंद होने से ठीक पहले मैं एक ईवेंट उठाना चाहता हूं। मैं पॉपअप विंडो ऑब्जेक्ट को ऑब्जेक्ट के रूप में संग्रहीत कर रहा हूं, लेकिन मुझे बंद घटना से बांधने के लिए किसी भी तरह से नहीं पता है, या खिड़की बंद होने से ठीक पहले एक घटना नहीं है।पॉपअप विंडो बंद होने पर मैं एक ईवेंट (jQuery या वेनिला जावास्क्रिप्ट) कैसे उठाऊंगा?

var popupWindow = window.open("/popup.aspx", "popupWindow", "height=550,width=780"); 

वहाँ किसी भी तरह से jQuery, या सिर्फ कच्चे जावास्क्रिप्ट का उपयोग करते हुए करीब घटना की सदस्यता के लिए है? मैं jQuery का उपयोग कर रहा हूं और एक और लाइब्रेरी नहीं जोड़ सकता, इसलिए अगर यह jQuery में नहीं किया जा सकता है तो मुझे अपनी खुद की इवेंट सिस्टम रोल करना होगा ताकि यह सभी ब्राउज़रों में काम करे।

अद्यतन:
मैं jQuery में और किसी कारण के रूप में मेरे पॉपअप जब यह बंद कर दिया है के बजाय खोलता घटना के रूप में जल्द ही उठाया है के लिए अनलोड घटना का उपयोग कर की कोशिश की है। अगर मैं अनलोड ईवेंट को सब्सक्राइब करने में देरी करने के लिए ब्रेकपॉइंट सेट करने के लिए फ़ायरबग का उपयोग करता हूं, तो अनलोड ईवेंट जिस तरह से माना जाता है, वैसे ही काम करता है, लेकिन किसी भी कारण से, यह जावास्क्रिप्ट को स्वाभाविक रूप से निष्पादित करने की अनुमति देने पर सही तरीके से काम नहीं करता है।

var popupWindow = window.open("/popup.aspx", "popupWindow", "height=550,width=780"); 
$(popupWindow.window).unload(function() { alert('hello'); }); 

क्या किसी के पास कोई विचार है कि विंडो लोड होने पर अनलोड ईवेंट क्यों उठाया जा सकता है?

एक अन्य पकड़ मैंने देखा है कि कि jQuery के "उतारना" घटना खिड़की करने के लिए सदस्यता नहीं रहता है जैसे कि यह सामान्य रूप से करता है, तो मैं सिर्फ क्या करता है:

popupWindow.onunload = function(){alert('hello')}; 

यह घटना से सदस्यता समाप्त करने लगता है हर समय उठाया गया है। क्या यह होने के लिए माना गया है? अगर यह jQuery में इस बग (या फीचर?) के लिए नहीं था, तो यह ठीक होगा कि ईवेंट लोड पर उठाया जाए क्योंकि मैं इस घटना के अंदर popupWindow.closed संपत्ति की जांच कर सकता हूं ताकि यह सुनिश्चित किया जा सके कि खिड़की वास्तव में बंद थी।

उत्तर

2

अनलोड घटना

$(window).unload(function() { alert("Bye now!"); });

jQuery unload documentation

संपादित से के लिए jQuery कोड उदाहरण:

मैं चारों ओर खेला और माता पिता के प्राप्त करने में सक्षम नहीं था अनलोड सेट करने में सक्षम होने के लिए विंडो। पॉपअप विंडो एचटीएमएल में स्क्रिप्ट मौजूद होने का एकमात्र तरीका मैं इसे काम करने के लिए प्राप्त कर सकता था। पॉपअप विंडो को jQuery लोड करने की भी आवश्यकता है। मेरे पास इसका आधार बनाने के लिए कुछ भी नहीं है, लेकिन मेरा मानना ​​है कि अनलोड को ट्रिगर किया जा रहा है, क्योंकि अनिवार्य रूप से पॉपअप विंडो को मूल विंडो के दायरे से उतार दिया जा रहा है। केवल अनुमान है।

ओपेरा 9.0.x-9.2.x केवल window.onUnload चलाता उपयोगकर्ता एक से कहीं और चला जाए:

0

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

यह ओपेरा 9.5.x के लिए सबसे अधिक संभावना है। अन्य ब्राउज़र भी इसे कार्यान्वित कर सकते हैं, लेकिन मुझे विश्वास नहीं है कि आईई या फ़ायरफ़ॉक्स करते हैं।

0

जो मैंने जांच की है वह jQuery अनलोड केवल देशी फ़ंक्शन के लिए एक आवरण है। मैं गलत हो सकता था क्योंकि मैंने उस गहरे को खोला नहीं था।

यह उदाहरण मेरे लिए काम किया।

$(document).ready(function(){ 
    $(window).unload(function(){ 
     alert('preget'); 
     $.get(
      '/some.php', 
      { request: 'some' } 
     ); 
     alert('postget'); 
    }); 
}); 

याद रखें कि कुछ browsers block the window.open requests on unload, IE for example

18

मैं एक द्रष्टा अगर खिड़की बंद कर दिया गया जाँच करता है कि बनाया:

var w = window.open("http://www.google.com", "_blank", 'top=442,width=480,height=460,resizable=yes', true); 
var watchClose = setInterval(function() { 
    if (w.closed) { 
    clearTimeout(watchClose); 
    //Do something here... 
    } 
}, 200); 
+0

मेरी समस्या बढ़िया है, यह हल;) –

7

मैं द्रष्टा दृष्टिकोण की कोशिश की, लेकिन जब IE6 में इस का उपयोग करते हुए इस मुद्दे को "से इनकार अनुमति" करने के लिए भाग गया। यह तब होता है की वजह से बंद कर दिया संपत्ति विंडो बंद करने की घटना के आसपास पूरी तरह से सुलभ नहीं किया जा रहा ... लेकिन सौभाग्य से एक कोशिश {} पकड़ निर्माण के साथ करने के लिए यह हालांकि काम करता है: ओ)

var w = window.open("http://www.google.com", "_blank", 'top=442,width=480,height=460,resizable=yes', true); 

var watchClose = setInterval(function() { 
    try { 
     if (w.closed) { 
      clearTimeout(watchClose); 
      //Do something here... 
     } 
    } catch (e) {} 
}, 200); 

आप मैगनस

3

धन्यवाद मुझे लगता है कि मैंने यह पता लगाया है कि क्या हो रहा है:

जब आप window.open का उपयोग करते हैं तो यह "लगभग: खाली" स्थान के साथ एक नई विंडो खुलता है और फिर इसे फ़ंक्शन कॉल पर प्रदान किए गए यूआरएल में बदल देता है।

तो, अनलोड ईवेंट "लगभग: रिक्त" से दाएं यूआरएल में परिवर्तन से पहले बाध्य है और बदलते समय निकाल दिया जाता है।

मैं इसे JQuery ऐसा करने के साथ काम मिल गया:

$(function(){ 
    var win = window.open('http://url-at-same-domain.com','Test', 'width=600,height=500'); 
    $(win).unload(function(){ 
     if(this.location == 'about:blank') 
     { 
      $(this).unload(function(){ 
       // do something here 
      }); 
     } 
    }); 
}); 
संबंधित मुद्दे