पृष्ठ छोड़ने पर जावास्क्रिप्ट अलर्ट को कैसे रोका जाए?


12

जब आप उन्हें छोड़ते हैं, तो बहुत से पृष्ठों में अलर्ट होते हैं: यदि आप टैब बंद कर देते हैं, तो बचत के बिना दूर चले जाते हैं, आदि, तो कई कारण हैं कि कोई साइट आपको अलर्ट छोड़ने की चेतावनी देती है / रोकती है जब तक कि आप अलर्ट की पुष्टि नहीं करते हैं, जैसे "क्या आप सुनिश्चित हैं कि आप चाहते हैं इस पृष्ठ से दूर नेविगेट करें? ”।

यह आमतौर पर onbeforeunloadऔर / या onunloadहैंडलर के साथ किया जाता है ।

यहाँ एक उदाहरण है।

क्या कोई तरीका है जिससे मैं उन हैंडलर द्वारा उत्पन्न अलर्ट / उपयोगकर्ता-अवरुद्ध घटनाओं को रोक सकता हूं? असल में, मैं जेएस सक्षम छोड़ना चाहता हूं, और विशेष रूप से उन चीजों को अस्वीकार कर देता हूं जो मुझे एक अतिरिक्त क्लिक किए बिना पृष्ठ छोड़ने से रोकेंगे।

onbeforeunloadऔर onunloadहैंडलर अभी भी आग लगाना चाहिए; उन्हें बस उन चीजों को करने की अनुमति नहीं दी जानी चाहिए जो उपयोगकर्ता को रोकती हैं। इसका मतलब है कि कोई अलर्ट नहीं, और कोई भी ऑपरेशन जो कुछ सेकंड से अधिक नहीं लेता है।

मुझे कुछ प्लगइन्स मिले हैं जो विशेष पृष्ठों के लिए जावास्क्रिप्ट को संपादित करते हैं / चिकना करते हैं, और कोशिश करते हैं और उन्हें अधिक सार्वभौमिक रूप से लागू करने के लिए अपने कोड के साथ खेलते हैं। हालाँकि, मैं एक समाधान खोजने की उम्मीद कर रहा हूं जो किसी भी पृष्ठ पर काम करता है जो उपयोगकर्ता के निकास को अवरुद्ध करने का प्रयास करता है।


क्या आप ऐसा URL पोस्ट कर सकते हैं जो ऐसा करता हो?
गोलिमार g

संपादित, जोड़ा उदाहरण। इसके अलावा, मैं समझता हूं कि यह व्यवहार अक्सर वांछनीय क्यों होता है, और यह कि कई मामलों में आकस्मिक डेटा हानि को रोकने के लिए इसकी आवश्यकता होती है। मैं अब भी जानना चाहता हूं कि इसे कैसे ओवरराइड / अक्षम करना है।
Zac B

नोट: सभी वर्तमान उत्तर (जो संशोधित करते हैं onbeforeunload) केवल उन पृष्ठों के लिए काम करेंगे onbeforeunload, जो उन पृष्ठों के लिए काम करते हैं , न कि उन पृष्ठों के लिए जो घटनाओं को संलग्न करने के लिए अन्य तरीकों में से एक का उपयोग करते हैं।
4

जवाबों:


7

खैर, सबसे सरल बात यह है कि सीधे पेज स्क्रिप्ट को सीधे ओवरराइड किया जाता है, और इस घटना को फिर से असाइन किया जाता है null

window.onbeforeunload = null;

यह कहीं भी काम करना चाहिए, जब तक कि वे वास्तव में दुर्भावनापूर्ण न हों, और इसे स्वयं को आश्वस्त करते रहें। ऐसे मामले में, सेटिंग रखने के लिए एक लूप nullशायद काम करेगा।

while(true) {
    if (window.onbeforeunload != null) {
        window.onbeforeunload = null;
    }
}

अब, चेतावनी दी जाए, कुछ पृष्ठ अच्छे के लिए इसका उपयोग करते हैं। YouTube अपलोड पृष्ठ लें: यदि आप किसी अपलोड के दौरान दूर जाते हैं, तो आपके पास प्रगति के घंटे कम हो सकते हैं! या शायद एक वेब फॉर्म जिसे आप भर रहे हैं, जिसे आप फिर से भरना नहीं चाहते हैं, या एक संदेश (मंच / ईमेल) जिसे आप दोबारा प्राप्त नहीं करना चाहते हैं। इस सुविधा के साथ, आप सुरक्षित हैं।

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

लेकिन, जाहिर है, हम सभी जानते हैं कि कई पेज बीमार के लिए इसका उपयोग करते हैं। इसलिए यदि आप किसी भी ऐसे पृष्ठ के बारे में जानते हैं जो आप चाहते हैं कि आप इस पर काम करें, तो आपके पास हमेशा एक सफेद सूची प्रणाली हो सकती है। वास्तव में इस कार्रवाई को अवरुद्ध करने का कोई तरीका नहीं है, पूरी तरह से अवरुद्ध किए बिना window.onbeforeunload, और किसी भी (संभवतः अच्छे) कार्यों को ले सकता है।

पॉपअप बॉक्स को रोकते समय अच्छे कार्यों को रखने के लिए कोई तरीका (किसी दिए गए पृष्ठों के पूर्व ज्ञान के बिना) नहीं है। यह बॉक्स नहीं है alert()। बॉक्स ब्राउज़र द्वारा उत्पन्न किया जाता है, जैसा कि इच्छित व्यवहार है onbeforeunload। एक window.onbeforeunloadस्ट्रिंग वापस करने के लिए वे जो भी कार्य करते हैं, उसे बनाकर इसे बनाते हैं । उस स्ट्रिंग को पॉपअप में प्रिंट किया जाएगा।

window.onbeforeunload = function() {
    //Whatever
    return "WARNING! You have unsaved changes that may be lost!";
}

इस प्रकार, आप फ़ंक्शन को मिटाए बिना पॉपअप को ब्लॉक करने में असमर्थ होंगे।

इसके अलावा, अगर आपको कोई रास्ता मिल गया, तो कोई भी AJAX विफल हो जाएगा। पॉपअप अनुरोधों के माध्यम से जाने का समय देता है, इसके बिना, डेटा खो सकता है।

के रूप में onunload, यह आप के साथ यह ब्लॉक करने के लिए संभव नहीं होना चाहिए। चूंकि यह पेज अनलोड होने के बाद फायर करता है। लेकिन सुरक्षित होने के लिए, आप हमेशा एक कर सकते हैं window.onunload = null;और इसका ध्यान रखा जाना चाहिए।


इस तरह के काम करता है, लेकिन क्या होगा अगर onbeforeunloadहैंडलर ने कुछ और महत्वपूर्ण किया हो? उदाहरण के लिए, यह क्या है अगर एक संक्षिप्त AJAX अनुरोध किया है, या स्थानीय HTML5 भंडारण के लिए कुछ किया है? क्या केवल onbeforeunloadहैंडलर को कुछ कॉल करने (यानी alert()), या एक निश्चित अवधि से अधिक समय तक चलने से रोकने का कोई तरीका है ? इसीलिए मैंने केवल एक ग्रीसी-प्रकार की स्क्रिप्ट के बजाय एक विस्तार के बारे में पूछा: ऐसा लगता है, इस अधिकार को करने के लिए, जावास्क्रिप्ट इंजन स्तर पर कुछ बदलना होगा।
Zac B

1
मैंने कुछ और जानकारी जोड़ी है। जहां तक ​​वास्तव में निचले स्तर पर इसे ठीक करने की बात है, वास्तव में एक्सटेंशन निचले स्तर के नहीं हैं। उनके पास उच्च अनुमतियां और कुछ विशेष API हैं, लेकिन उनके पास ब्राउज़र के मुख्य कार्यों को बदलने की क्षमता नहीं है। मुझे यकीन नहीं है कि एफएफ प्लगिंग कितना गहरा जा सकता है, मुझे उस क्षेत्र में कोई अनुभव नहीं है। जाहिर है, खुला स्रोत होने के नाते, आप उन बदलावों को कर सकते हैं। लेकिन यह एक पॉपअप को ठीक करने के लिए थोड़ा दूर जा रहा है।
ZEEL

मेरे लिए काम नहीं कर रहा है :(
फुग गुयेन

0
    // ==/UserScript==

var th = document.getElementsByTagName('body')[0];
var s = document.createElement('script');
s.setAttribute('type','text/javascript');
s.innerHTML = "window.onbeforeunload = function() {}";
th.appendChild(s);

1
आप कभी इस तरह की स्क्रिप्ट क्यों बनाएंगे?
ब्रैड

3
@anywho। यह मददगार हो सकता है यदि आप दूसरों को यह जानने में मदद करने के लिए अपनी स्क्रिप्ट को समझाने की कोशिश करें कि वे क्या कर रहे हैं। यह आपको कई लोगों द्वारा उपयोग किए जाने वाले उत्तर की भी अनुमति देगा क्योंकि स्क्रिप्ट के एक विशिष्ट टुकड़े को स्क्रिप्ट में सुधार करने के लिए एक तरह से बदल दिया जा सकता है या एक टुकड़ा पूरी तरह से अलग स्क्रिप्ट में उपयोग करने में सक्षम हो सकता है। लोगों को यह जानने में मदद करने के लिए कि आप उनके प्रश्न पर कैसे लागू होते हैं, यह बताने के लिए किसी भी तरह का उत्तर देना भी एक अच्छा विचार है। यद्यपि अपना उत्तर पोस्ट करने के लिए धन्यवाद।
डेविड

0

एक अच्छा उपकरण है जो विंडोज सिस्टम पर किसी भी कष्टप्रद पॉपअप को संभाल सकता है - क्लिकऑफ । आप इसे यहाँ से डाउनलोड कर सकते हैं । मैंने इसे चेक किया और यह SharePoint साइट के लिए "आपके द्वारा किए गए परिवर्तन सहेजे नहीं जा सकते" अलर्ट के साथ काम करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.