2012-07-30 13 views
23

मैं एक वेब ऐप विकसित कर रहा हूं जो जावास्क्रिप्ट alert() और confirm() संवाद बॉक्स का उपयोग करता है।"इस पृष्ठ को अतिरिक्त संवाद बनाने से रोकने" को कैसे अक्षम करें?

मैं क्रोम को इस चेकबॉक्स को दिखाने से कैसे रोक सकता हूं?

वहाँ एक सेटिंग मैं संशोधित कर सकते हैं है?

मुझे पता है कि मैं स्रोत कोड संशोधित कर सकता हूं, लेकिन मुझे यह पसंद है ताकि क्रोम अभी भी स्वतः अपडेट हो सके।

मुझे अन्य ब्राउज़रों के बारे में चिंता करने की आवश्यकता नहीं है क्योंकि ऐप केवल क्रोम में चलता है।

मेरे पास ऐप चलाने वाली (विंडोज़) मशीनों तक व्यवस्थापक पहुंच है।

उत्तर

38

आप नहीं कर सकते। साइट्स को छोड़ने से रोकने के लिए सैकड़ों अलर्ट दिखाने से रोकने के लिए यह एक ब्राउज़र सुविधा है।

हालांकि, आप jQuery UI Dialog जैसे मोडल पॉपअप में देख सकते हैं। ये जावास्क्रिप्ट अलर्ट बॉक्स हैं जो एक कस्टम संवाद दिखाते हैं। वे डिफ़ॉल्ट alert() फ़ंक्शन का उपयोग नहीं करते हैं और इसलिए, जो समस्या आप पूरी तरह से चल रहे हैं उसे बाईपास करें।

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

+1

मैं jQuery जैसे ढांचे को जोड़ना नहीं चाहता हूं। साथ ही, पूरे कोड में बहुत से 'अलर्ट() 'और' पुष्टिकरण() 'बॉक्स हैं। मैं उस चेकबॉक्स को अक्षम करने के लिए, पहिया को फिर से शुरू नहीं करना चाहता हूं। –

+1

@ डैनीबेकेट वहाँ शुद्ध जेएस मोडल भी हैं। जेएस वास्तव में न्यूनतम हो सकता है, यह सिर्फ एक div दिखाने/छिपाने के लिए है। बाकी सीएसएस है। आप डिफ़ॉल्ट अलर्ट/पुष्टिकरण कार्यों को अपने आप से ओवरराइड कर सकते हैं ताकि आपको अपना कोड बदलना न पड़े। – sachleen

+2

वैसे, आप मौजूदा अलर्ट फ़ंक्शन को आसानी से ओवरराइड कर सकते हैं, इसलिए 'अलर्ट()' के सभी कॉल मूल के बजाय आपके कस्टम मोडल पॉपअप का उपयोग करेंगे। http://stackoverflow.com/questions/1729501/javascript-overriding-alert – sachleen

-1

यदि आप चाहते हैं तो उपयोगकर्ता को ऐसा करने देना चाहिए (और आप उन्हें वैसे भी रोक नहीं सकते हैं)।

आपकी समस्या यह है कि आपको यह जानने की जरूरत है कि उन्हें पता है और फिर मान लें कि उनका मतलब ठीक है, रद्द नहीं करें। myConfirm(x) साथ confirm(x) बदलें:

function myConfirm(message) { 
    var start = Number(new Date()); 
    var result = confirm(message); 
    var end = Number(new Date()); 
    return (end<(start+10)||result==true); 
} 
+0

यह काम नहीं करता है। चेकबॉक्स अभी भी दिखाया गया है: http://i.imgur.com/WRMeDHj.png - यहां मेरा पहेली है: http://jsfiddle.net/x2N5E/ –

7

मैं जानता हूँ कि हर कोई इस के खिलाफ नैतिकता की दृष्टि से है, लेकिन मैं समझता हूँ कि वहाँ व्यावहारिक मजाक कर रहा, जहाँ इसकी आवश्यकता है कारण हैं। मुझे लगता है कि क्रोम ने चेतावनी संदेशों के बीच अनिवार्य एक दूसरे अलगाव समय को लागू करके इस पर एक ठोस रुख अपनाया। यह विज़िटर को पृष्ठ को बंद करने के लिए पर्याप्त समय देता है या अगर वे एक परेशान शरारत साइट पर फंस जाते हैं तो रीफ्रेश करें।

तो अपने प्रश्न का उत्तर देने के लिए, यह समय की बात है। यदि आप प्रति सेकंड एक से अधिक बार चेतावनी देते हैं, तो क्रोम उस चेकबॉक्स को बनाएगा।

var countdown = 99; 
function annoy(){ 
    if(countdown>0){ 
     alert(countdown+" bottles of beer on the wall, "+countdown+" bottles of beer! Take one down, pass it around, "+(countdown-1)+" bottles of beer on the wall!"); 
     countdown--; 

     // Time must always be 1000 milliseconds, 999 or less causes the checkbox to appear 
     setTimeout(function(){ 
      annoy(); 
     }, 1000); 
    } 
} 

// Don't alert right away or Chrome will catch you 
setTimeout(function(){ 
    annoy(); 
}, 1000); 
+0

आपको यह कहां मिला कि यह एक सेकंड है या आप अनुमान लगा रहे हैं? – DeadlyChambers

+2

ऐसा प्रतीत होता है कि मोज़िला 3 सेकंड अवधि का उपयोग कर रहा है। https://bugzilla.mozilla.org/show_bug.cgi?id=61098#c209 – DeadlyChambers

+0

जानकारी के लिए धन्यवाद, यह जानना अच्छा है कि एफएफ 3 सेकंड है, मैं केवल क्रोम में इस कोड का परीक्षण करता हूं। मैंने कुछ संक्षिप्त परीक्षणों के माध्यम से क्रोम के 1-सेकंड नियम की खोज की, आप अपने लिए परीक्षण कर सकते हैं कि 1000ms से नीचे का कोई भी अंतराल चेकबॉक्स को प्रकट करने का कारण बनता है, इसलिए यह केवल कुछ नहीं है जो मैंने बनाया है। वे भविष्य में इसे बहुत अच्छी तरह से बदल सकते हैं लेकिन अभी के लिए यह बिल्कुल 1 सेकंड है। – CauselessEffect

8

यह मैं क्या कर समाप्त हो गया, क्योंकि हम (एक वेब अनुप्रयोग है कि हमारे नियंत्रण में नहीं हैं से अधिक उपयोगकर्ता हैं कि ... है @ DannyBeckett मैं इस isn पता है ': यहाँ एक समाधान का एक सरल उदाहरण है आपके प्रश्न का सटीक उत्तर नहीं है, लेकिन जो लोग आपके प्रश्न को देख रहे हैं, उन्हें इससे मदद मिल सकती है।) आप कम से कम पता लगा सकते हैं कि वे संवाद नहीं देख रहे हैं या नहीं। ऐसी कुछ चीजें हैं जिन्हें आप प्रदर्शित करने के समय की तरह बदलना चाहते हैं, या जो वास्तव में आप प्रदर्शित कर रहे हैं। याद रखें यह केवल उपयोगकर्ता को सूचित करेगा कि वे उस छोटे से चेकबॉक्स पर क्लिक करने में कामयाब रहे हैं।

window.nativeAlert = window.alert; 
window.alert = function (message) { 
    var timeBefore = new Date(); 
    var confirmBool = nativeAlert(message); 
    var timeAfter = new Date(); 
    if ((timeAfter - timeBefore) < 350) { 
     MySpecialDialog("You have alerts turned off"); 
    } 
} 

window.nativeConfirm = window.confirm; 
window.confirm = function (message) { 
    var timeBefore = new Date(); 
    var confirmBool = nativeConfirm(message); 
    var timeAfter = new Date(); 
    if ((timeAfter - timeBefore) < 350) { 
     MySpecialDialog("You have confirms turned off"); 
    } 
    return confirmBool; 
} 

स्पष्ट रूप से मैंने समय 3.5 मिलीसेकंड निर्धारित किया है। लेकिन कुछ परीक्षणों के बाद हम लगभग 5 मिलीसेकंड प्लस में संवाद को क्लिक या बंद करने में सक्षम थे।

+0

यह कैसे काम करता है? – locateganesh

+0

@locateganesh यह मूल पुष्टि और चेतावनी के उच्च जैकिंग द्वारा काम करता है। 350 मिलीसेकंड है, और यह जांच रहा है कि पुष्टि/अलर्ट कब तक खुला है। यदि यह उससे अधिक समय तक खुला है तो यह माना जाता है कि अलर्ट/पुष्टिएं अवरुद्ध नहीं हैं। "MySpecialDialog" एक संवाद बॉक्स है जिसे आपने बनाया है जो ब्राउज़र की मूल अलर्ट/पुष्टि का उपयोग नहीं करता है। तो यदि आपके पास बूटस्ट्रैप मोडल है या ऐसी कोई चीज है तो वह इसे खोल देगा और उपयोगकर्ता को सूचित करेगी। – DeadlyChambers

3

आपको उस चेकबॉक्स को हटाने का प्रयास करने के बजाय jquery-confirm का बेहतर उपयोग करना चाहिए।

$.confirm({ 
    title: 'Confirm!', 
    content: 'Are you sure you want to refund invoice ?', 
    confirm: function(){ 
     //do something 
    }, 
    cancel: function(){ 
     //do something 
    } 
}); 
संबंधित मुद्दे

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