2009-04-29 7 views
5

आईई और एफएफ में, मैं एक ईवेंट हैंडलर को पहले से लोड करने के लिए संलग्न कर सकता हूं, और घटना की एक संपत्ति के लिए एक स्ट्रिंग पास करके, उपयोगकर्ता उसे एक संवाद दिखाई देगा कि क्या वह "अनलोडिंग" जारी रखना चाहता है (या तो बंद करना खिड़की या दूर जा रहा है)।क्या उपयोगकर्ता सफारी/क्रोम में विंडो बंद कर रहा है जब मैं एक पुष्टिकरण संवाद पॉप अप कर सकता हूं?

सफारी और क्रोम पर पहले से समर्थन नहीं करते हैं, और ऑनलोड बहुत देर हो चुकी है। सफारी/क्रोम में समान कार्यक्षमता को दोहराने का कोई तरीका है?

नोट: मैं उपयोगकर्ता बंधक को रखने की कोशिश नहीं कर रहा हूं। मुझे पता है कि यह घबराहट और शांत है। असल में, मेरी साइट उपयोगकर्ता को स्वतंत्र रूप से जाने देने के लिए बहुत अधिक समय तक जाती है, और जब वे वापस आते हैं तो सब कुछ उसके स्थान पर होता है। हालांकि, मैं IFrames के अंदर अन्य साइटों को होस्ट कर रहा हूं, और कभी-कभी ये मुझसे छुटकारा पाने और ब्राउज़र को लेने का निर्णय लेते हैं, जो मैं बचने की कोशिश कर रहा हूं।

धन्यवाद!

+0

ध्यान दें कि इसे आम तौर पर विवाद के लिए कठोर माना जाता है अन्य लोगों की साइटें अपने स्वयं के फ्रेम में रखें, और डिग ने हाल ही में ऐसा किया जब एक बड़ी चिल्लाहट हुई। –

+0

मुझे पता है, और सुझाव के लिए धन्यवाद। हालांकि, हमारे पास डिग की तुलना में बहुत अलग लक्ष्य है, और (हम कम से कम विश्वास करते हैं) हमारे पास ऐसा करने का एक अच्छा कारण है, यह कुछ वास्तविक कार्यक्षमता प्रदान करता है। –

उत्तर

7

यह दोनों क्रोम और सफारी में मेरे लिए पूरी तरह से काम करता है:

<html><body><p>Test</p> 
<script>window.onbeforeunload = function() { return "Sure?"; }</script> 
</body></html> 

जब मैं विंडो को बंद करने की कोशिश, मैं शीघ्र मिलता है।

+0

हम्मम्मम्म। यह अजीब है ... मेरा कोड सफारी में काम नहीं कर रहा था। शायद ऐसा इसलिए है क्योंकि मैं हैंडलर संलग्न करने के लिए प्रोटोटाइप के Event.observe() का उपयोग कर रहा था ... वैसे भी, बहुत बहुत धन्यवाद! आपने अभी अपना जीवन इतना आसान बना दिया है! –

+0

@RichieHindle क्या मैं इस विधि का उपयोग कर बच्चे को बंद करते समय रीफ्रेश करने के लिए मूल विंडो को कॉल कर सकता हूं? या क्या मैं इसे पुष्टि के बजाए एक और जेएस फ़ंक्शन कॉल कर सकता हूं? – raym0nd

+0

@ raym0nd: 'onbeforeunload' हैंडलर पर प्रतिबंधों का एक गुच्छा है जो यह कर सकता है। मुझे बिल्कुल यकीन नहीं है कि वे क्या हैं, और ब्राउज़र के बीच वे अलग-अलग होने की संभावना है। आपको इसका परीक्षण करना चाहिए, लेकिन मुझे संदेह होगा कि यह अब और भविष्य में हर जगह काम करेगा। – RichieHindle

2

StackOverflow ही onbeforeunload का उपयोग करता है, और यह सफारी में मेरे लिए ठीक काम करता है:

function setConfirmUnload(a){window.onbeforeunload=a?function(){return a}:null} 
2

मैं क्रोम में यह जाँच करने और उसका उपयोग इस ठीक काम कर रहा है:

<body onunload="alert('x');" onbeforeunload="test1();"> 
+0

मूल प्रश्न कहता है कि 'ऑनलोड बहुत देर हो चुकी है'। –

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