2009-07-10 5 views
9

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

मैंने क्या सीखा: एक मूल विंडो एक बच्चे की खिड़की खोलती है। बाल खिड़की एक अलग डोमेन पर रीडायरेक्ट करता है और वापस रीडायरेक्ट हो जाता है। यह खुद को बंद करने पर पैरेंट विंडो के एक समारोह को आग लगाने का प्रयास करता है।

window.opener.startLoad(); 

इससे अनुमति (सुरक्षा) समस्या होती है और काम नहीं करेगा।

(आधा) नई समस्या: मैं एक बच्चे की खिड़की खोलने के लिए खिड़की कैसे प्राप्त कर सकता हूं और जब यह पैरेंट विंडो में एक फ़ंक्शन चलाता है?

मैं यह कर के रूप में इस एक बहुत हो रहा हो जाएगा का एक बहुत ही कारगर तरीका की जरूरत है!

किसी भी मदद के लिए धन्यवाद।

+0

मेरा उत्तर पर अपने नवीनतम टिप्पणी के जवाब में, मुझे डर है कि मैं एक कारण यह फ़ंक्शन को कॉल नहीं किया जाएगा जब खिड़की बंद कर देता के बारे में सोच नहीं सकता हूँ। क्या आप अपना कोड पोस्ट कर सकते हैं जहां आप विंडो खोलते हैं, और जिस फंक्शन को बंद करने पर आप कॉल करने का प्रयास कर रहे हैं? मैं आपको और अधिक मदद करने में सक्षम हो सकता हूं, लेकिन अभी मैं विचारों से बाहर हूं। – Sean

उत्तर

19

इस प्रयास करें:

var win = window.open(url, name); 
win.onunload = afterChildClose; // afterChildClose() is the function. 
win.close(); // afterChildClose() should fire now. 

सभी इस कोड स्थित है और माता-पिता खिड़की की जावास्क्रिप्ट में क्रियान्वित किया जा सकता है (afterChildClose सहित())। आप विंडो बना रहे हैं और फ़ंक्शन को अनलोड ईवेंट में असाइन कर रहे हैं।

ओह, एक बात मैं सिर्फ के बारे में सोचा। यदि बच्चा खिड़की रीफ्रेश या किसी अन्य यूआरएल पर नेविगेट करता है, तो ऑनलोड लोड भी आग लग जाएगा। यदि आप खिड़की बंद होने पर केवल ईवेंट को आग लगाना चाहते हैं, तो आपको WinChclosed पर AfterChildClose() में एक चेक शामिल करना चाहिए।

संपादित करें: यहाँ दो नमूना पृष्ठों मैं एक साथ रखा इस बाहर की कोशिश करने के लिए कोड है।

जनक खिड़की:

<html> 
<body> 
<script type="text/javascript"> 
    var win = window.open("secondwindow.html", "woo"); 
    win.onunload =onun; 

    function onun() { 
     if(win.location != "about:blank") // This is so that the function 
              // doesn't do anything when the 
              // window is first opened. 
     { 
      alert("closed"); 
     } 
    } 
</script> 
</body> 
</html> 

चाइल्ड विंडो ("secondwindow.html"):

<html> 
<body> 
<script type="text/javascript"> 
    setTimeout('window.close();', 5000); 
</script> 
</body> 
</html> 

जब मैं फ़ायरफ़ॉक्स में पहली दस्तावेज़ खोलने का प्रयास करें, यह विंडो खोलता है, खिड़की इंतजार कर रहा है 5 सेकंड और छोड़ देता है, और पहला दस्तावेज़ अलर्ट() दिखाता है, इसलिए यह तब भी काम कर रहा है जब उप विंडो स्वयं बंद हो जाती है।

+0

afterChildClose फ़ंक्शन कहां रहता है? – Abs

+0

तो क्या आप पैरेंट विंडो से चाइल्ड विंडो बंद कर रहे हैं? – Abs

+0

हां, 'win.close()' यह दिखाने के लिए है कि बच्चे विंडो बंद होने पर क्या होगा। मेरे उत्तर में कोड आपका पूरा समाधान नहीं है, यह केवल उस तकनीक को दिखाता है जो आपको आवश्यकतानुसार करने की अनुमति देगा।यह तकनीक बच्चे विंडो ऑब्जेक्ट को खोलने के बाद कैप्चर करना है, और फिर उस ऑब्जेक्ट को ईवेंट असाइन करें (जैसे ऑननलोड)। – Sean

2

मैं यहाँ उतरा इसी तरह की सुविधा की तलाश में है, लेकिन काफी यह क्रॉस-ब्राउज़र संगतता के साथ काम करने से कभी नहीं मिल सकता है। तो यहाँ एक और तरीका है एक बच्चे के रूप में खिड़की बंद कर देता है कोड निष्पादित करने के लिए है:

var win = window.open("http://www.google.com"); 

var winClosed = setInterval(function() { 

    if (win.closed) { 
     clearInterval(winClosed); 
     location.assign("http://www.bing.com/"); //Execute your code here 
    } 

}, 250); 

यह बच्चे खिड़की से किसी भी घटना संचालकों का उपयोग नहीं करता है, और यह चाइल्ड विंडो की सामग्री को संशोधित करने की जरूरत नहीं है।

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

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