2012-08-29 17 views
10

यह कोड फ़ायरफ़ॉक्स, पर ठीक चलता है लेकिन मैं अब अनलोड ईवेंट को Chrome पर काम नहीं कर सकता। क्या क्रोम अनलोड ईवेंट का समर्थन करना बंद कर दिया था?मैं क्रोम में अनलोड ईवेंट ट्रिगर नहीं कर सकता

यह मेरा कोड है:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title></title> 

<script type="text/javascript" src="../jquery/jquery.js"></script> 

<script type="text/javascript"> 

    function pageHidden(evt) { alert("Are you sure 1?"); } //WORKS ON FIREFOX BUT NOT IN CHROME 
    window.addEventListener("pagehide", pageHidden, false); 

    window.onunload = function() { alert("Are you sure 2?"); } //TRIGGERS ON LOAD NOT ON UNLOAD 

    $(window).unload(function() { //WORKS ON FIREFOX BUT NOT IN CHROME 
     alert("Are you sure 3?"); 
    }); 

</script> 
</head> 

<body> 
TEST WEBSITE 
<a href="http://www.iamawesome.com">external link</a> 
</body> 
</html> 

मैं क्रोम में काम करने के लिए अनलोड घटना कैसे मिल सकता है?

धन्यवाद!


उत्तर: अलर्ट के साथ उतारना घटना का परीक्षण न करें;)

+1

संभावित डुप्ली: http://stackoverflow.com/questions/803887/can-i-pop-up-a-confirmation-dialog-when-the-user-is-closing-the-window-in-safari –

+0

आप अपने कोड में कहीं भी ट्रिगर नहीं कर रहे हैं। आप केवल बाध्यकारी हैंडलर हैं। – jbabey

+0

जांचें [यह बग रिपोर्ट] (http://bugs.jquery.com/ticket/10509)। संक्षेप में, यह क्रोम में काम नहीं करेगा; इसके बजाय '.onunload' हैंडलर का उपयोग करने का प्रयास करें, लेकिन यहां तक ​​कि यह भी 'निश्चित' हो सकता है।) – raina77ow

उत्तर

14
window.onunload = alert("Are you sure 2?"); 

यह गलत है। आप alert के परिणाम के onunload सेट कर रहे हैं, तो आप एक समारोह के लिए यह निर्धारित करने की आवश्यकता:

window.onunload = function(){ 
    alert("Are you sure?"); 
} 

आप jQuery का उपयोग करना चाहते हैं, तो यह सभी ब्राउज़रों में काम करेंगे।

$(window).unload(function() { 
    alert("Are you sure?"); 
}); 

नोट: यह ऐसा क्रोम में काम नहीं कर रहा लग सकता है लेकिन यह है। ऐसा इसलिए है क्योंकि क्रोम एस onunload ईवेंट में ब्लॉक करता है।

+1

यह मुद्दा था। क्रोम मेरे सभी अलर्ट को अवरुद्ध कर रहा था। मैंने एक console.log की कोशिश की और यह ठीक काम करता है। त्वरित उत्तर के लिए धन्यवाद –

+0

आपका स्वागत है :-) –

+2

यदि आप अलर्ट का उपयोग करते हैं, तो आपको क्रोम के कंसोल में एक त्रुटि दिखाई देनी चाहिए। –

2

प्रयास करें:

window.onbeforeunload = function() { 
    // code 
}; 

या

window.onpagehide = function() { 
    // code 
}; 
+0

धन्यवाद Korikulum! मैंने कोशिश की लेकिन यह प्रत्येक फंक्शन –

+0

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

1

तुम कुछ भी चालू नहीं करते - आप केवल उस अभिव्यक्ति को निष्पादित करते हैं जिसे आप जोड़ना चाहते हैं एक हैंडलर के रूप में:

window.onunload = function(event) { 
    alert("Are you sure 2?"); 
}; 
+0

अभी भी काम नहीं कर रहा है, मैं पेज से बाहर निकल सकता हूं और चेतावनी संदेश दिखाई नहीं देगा :( –

1

जो मैंने पढ़ा है, उससे ऐसा लगता है कि ईवेंट ट्रिगर होने के बाद क्रोम ब्लॉक अलर्ट करता है। आप कुछ फ़ंक्शंस चला सकते हैं, हालांकि, ऐसा कुछ भी नहीं है जो उपयोगकर्ता के साथ इंटरैक्ट करता है।

window.onbeforeunload in Chrome: what is the most recent fix? से, ऐसा लगता है कि यदि आप जो करना चाहते हैं, वह एक पुष्टिकरण संदेश पॉप अप कर रहा है, तो आपको कॉलबैक के रूप में सेट किए गए फ़ंक्शन से संदेश के साथ एक स्ट्रिंग लौटकर ऐसा करना होगा।

window.onbeforeunload = function() { 
    // Some wrap up code (no alerts, confirms, redirects, etc) 
    return 'My confirmation messsage'; 
} 

टेक्स्ट "मेरा पुष्टिकरण संदेश" तब क्रोम के चयन की पुष्टि वार्ता में दिखाई देगा। फ़ायरफ़ॉक्स इस व्यवहार को here दस्तावेज करता है।

+0

धन्यवाद, यह मेरे लिए काम करता है और मेरे वर्तमान डिजाइन के साथ अच्छी तरह से तैयार है – Callat

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