2011-02-01 7 views
17

क्या कोई पुष्टिकरण या अलर्ट बॉक्स प्रदर्शित होने पर पता लगाने के लिए जावास्क्रिप्ट या jQuery का उपयोग करने का कोई तरीका है?पता लगाएं कि किसी पृष्ठ पर एक चेतावनी या पुष्टि प्रदर्शित होती है

+1

वास्तव में "प्रदर्शित होने" का क्या मतलब है? क्या आपका मतलब है कि कोड में कमांड का संदर्भ है या नहीं? –

+0

वेब श्रमिकों के साथ आप ... –

+0

@ सिमविडास बताते हैं कि कैसे? – Raynos

उत्तर

5

कोई नहीं है। आप जांच सकते हैं कि confirm कमांड का वापसी मान वास्तव में true या false है लेकिन आप वहां जांच नहीं कर सकते कि वहां पर नजर है या नहीं।

ये चीजें ब्राउज़र का हिस्सा हैं जो डोम का हिस्सा नहीं है। मुझे यकीन है कि एक गंदे हैक है जो आईई के लिए काम करता है क्योंकि यह विंडोज ओएस का एक बेस्टर्डिज्ड बच्चा है।

+4

इस तथ्य के लिए +1 कि आपका दूसरा अनुच्छेद लगभग निश्चित रूप से सत्य है। – Moses

+0

@Moses मैं आपको विंडोज ओएस के लिए एक लिंक खोजने के लिए चुनौती देता हूं जो आपको एक्टिवली से जांचने की अनुमति देता है कि आईई – Raynos

+0

में चेतावनी शारीरिक रूप से प्रदर्शित होती है, मैंने सोचा कि आपके उत्तरों के लिए धन्यवाद !! – Uggers2k

1

पुष्टि करें और चेतावनी बक्से घटनाओं को अवरुद्ध कर रहे हैं - ये प्रदर्शित होने पर जावास्क्रिप्ट कोड निष्पादन रोक दिया गया है। तो नहीं - जहां तक ​​मुझे पता है कि कोई वर्तमान में प्रदर्शित नहीं हो रहा है, तो आप इसका पता नहीं लगा सकते हैं।

+0

यह सच है कि वे यूआई थ्रेड को अवरुद्ध करते हैं, लेकिन इसका मतलब यह नहीं है कि आप इसे स्नीफ कर सकते हैं। –

16

आप एक alert() आग, आप कुछ इस तरह की कोशिश कर सकते हैं जब कुछ कोड को चलाने के लिए चाहता था, तो:

मैं केवल क्रोम में परीक्षण किया है, इसलिए मैं ब्राउज़र समर्थन के बारे यकीन नहीं है।

उदाहरण:http://jsfiddle.net/Q785x/1/

(function() { 
    var _old_alert = window.alert; 
    window.alert = function() { 
        // run some code when the alert pops up 
     document.body.innerHTML += "<br>alerting"; 
     _old_alert.apply(window,arguments); 
        // run some code after the alert 
     document.body.innerHTML += "<br>done alerting<br>"; 
    }; 
})(); 

alert('hey'); 
alert('you'); 
alert('there'); 
बेशक

यह केवल आप पहले कोड चलाने के लिए और एक चेतावनी के बाद कर सकते हैं। जैसा कि @ कन्डर ने नोट किया है, चेतावनी प्रदर्शित होने पर जावास्क्रिप्ट निष्पादन रोक दिया गया है।

+0

यह भी अच्छा है। –

+0

मीठे समाधान! + 1'ed। – kander

+0

आपके पास कोई गारंटी नहीं है कि अलर्ट आग लगती है। आपका मानना ​​है कि window.alert सही ढंग से लागू किया गया है! – Raynos

2

आप ऐसा कर सकता है यदि आप चाहते हैं ...

(function() { 

    // remember the normal alert 
    var oldAlert = (function(){ return this.alert; }()), 
     oldConfirm = (function(){ return this.confirm; }()); 

    // inject ourself into the window.alert and window.confirm globals 
    alert = function (msg) { 
     oldAlert.call(document, msg); 
     document.onAlert(msg); 
    }; 
    confirm = function (msg) { 
     var result = oldConfirm.call(document, msg); 
     document.onConfirm(msg, result); 
     return result; 
    }; 

    // these just chill and listen for events 
    document.onAlert = function (msg) { 
     window.console && console.log('someone alerted: ' + msg); 
    }; 
    document.onConfirm = function (msg) { 
     window.console && console.log('someone was asked: ' + msg); 
     window.console && console.log('and they answered: ' + (msg ? 'yes' : 'no')); 
    }; 

}()); 

इस के नकारात्मक पक्ष यह है कि

  • आप एक ब्राउज़र (सामान के एक मेजबान विधि हैकिंग कर रहे हैं आप नहीं करना चाहिए आम तौर पर करते हैं - http://perfectionkills.com/whats-wrong-with-extending-the-dom/)
  • आप बस अपने alert()confirm() उपयोग के बेहतर ट्रैक रखते हुए किया जाना चाहिए, haha ​​
2

यदि आप यह जानना चाहते हैं कि इन्हें अवरुद्ध किया जा रहा है या नहीं। आपको उस संदेश के साथ अपनी खुद की बात करनी होगी जो आप विवादित करेंगे लेकिन मूल चेतावनी/पुष्टि को ओवरराइड करें।

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, turn them back on or die!!!"); 
    } 
} 

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 alerts turned off, turn them back on or die!!!"); 
} 
return confirmBool; 
} 

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

+0

पुष्टिकरण में() यदि समय सीमा बहुत कम है तो आप भी शून्य वापस कर सकते हैं; यह दोनों कॉलर्स द्वारा पता लगाया जा सकता है और साथ ही साथ अधिकांश सामान्य उपयोगों के लिए 'झूठी' लग रहा है। –

+0

बहुत कम समय पर शून्य (या झूठी) पर वापसी को ओवरराइड करने से कोई भी समय-समय पर दुर्घटनात्मक ऑटो-पुष्टिकरण को रोकने में मदद कर सकता है जब कोई फ़ॉर्म पोस्ट सबमिट करता है लेकिन बहुत लंबे समय तक एंटर कुंजी दबाता है। –

+0

यह एक बुरा विचार नहीं है, लेकिन मुझे उपयोगकर्ताओं के निर्णय को ओवरराइड करने की चिंता है, हो सकता है कि उन्हें पता चले कि वहां एक पुष्टि होगी। हालांकि मुझे ऐसा करने का लाभ दिखाई देता है क्योंकि ऐसा करने में यह एक छेड़छाड़ है। कोई भी जो प्रवेश कर सकता है वह विशेष संवाद को बंद कर देगा। लेकिन यह 99.9% समय काम करेगा। – DeadlyChambers

1

@ user113716 के उत्तर में जोड़ने के लिए आप समय पर भरोसा कर सकते हैं। मुझे लगता है कि अगर पुष्टि संवाद 200 एमएस से कम लेता है, तो यह ब्राउज़र द्वारा अवरुद्ध है। अगर पुष्टि संवाद अवरुद्ध है तो मैं सत्य वापस लौटाता हूं (डिफ़ॉल्ट रूप से यह झूठा लौटाता है, कोड टाइपस्क्रिप्ट में है)।

let oldConfirm = window.confirm; 
    window.confirm = (msg) => { 
     let time = new Date().getTime(); 
     let conf = oldConfirm(msg); 

     return new Date().getTime() - time > 200 ? conf : true; 
    } 
संबंधित मुद्दे