2012-11-29 27 views
16

क्या एक कस्टम मोडल संदेश बनाना संभव है जो उपयोगकर्ता इनपुट तक स्क्रिप्ट के निष्पादन को 'ब्लॉक' करता है?नकल जावास्क्रिप्ट 'चेतावनी' अवरुद्ध प्रकृति

उदाहरण के लिए, आप मूल विंडो अलर्ट/त्वरित कार्यों का उपयोग किए बिना इसे कैसे प्राप्त कर सकते हैं?

setInterval(function(){ 
    alert('Click OK to Continue'); // timing stops until user hits ok 
},4000); 

मैं जानता हूँ कि आप अपने कस्टम संवाद उपयोगकर्ता इनपुट पर एक कॉलबैक फ़ंक्शन आह्वान हो सकता था, लेकिन मैं इस अवरोधन व्यवहार

+6

,। सुरक्षा कारणों से, अपनी खुद की अवरुद्ध विधियों को जोड़ने का कोई तरीका नहीं है। –

+2

@EliGassert "दुर्भाग्य से"? शब्दों की अजीब पसंद ;-) –

+0

दुर्भाग्य से @pst, क्योंकि यह वेबदेव के लिए "सुंदर" अवरुद्ध संवाद करने के लिए जीवन को आसान बना देगा। लेकिन मुझे लगता है कि यह भाग्यशाली है क्योंकि इसका दुरुपयोग करना बहुत आसान होगा :) –

उत्तर

9

क्या एक कस्टम मोडल संदेश बनाना संभव है जो उपयोगकर्ता इनपुट तक स्क्रिप्ट के निष्पादन को 'ब्लॉक' करता है?

सं या तो निष्पादन या उपयोगकर्ता संपर्क के रूप में प्रभावी रूप से के रूप में एक देशी पॉपअप (के बाद से कस्टम के साथ उपयोगकर्ता पॉपअप हमेशा डेवलपर उपकरण का उपयोग कर इसे से बाहर निकलना की तकनीकी रूप से सक्षम है) ब्लॉक करने के लिए कोई तरीका नहीं है।

लेकिन, जैसा कि pst प्रश्न पर टिप्पणी में कहते हैं, अतुल्यकालिक lightboxes नहीं महती हैं, और लगभग के रूप में पॉपअप के रूप में उपयोगकर्ता बातचीत अवरुद्ध में प्रभावी रहे हैं, तो मैं एक पुस्तकालय है कि lightboxes प्रदान करता है आप की तरह खोजने और साथ चल रहे की सिफारिश उस।

उदाहरण के लिए, आप मूल विंडो अलर्ट/त्वरित कार्यों का उपयोग किये बिना इसे कैसे प्राप्त कर सकते हैं?

आप आप क्या कहते हैं तो यह और भी देशी खिड़की चेतावनी/शीघ्र कार्यों के साथ (- पॉपअप बंद करने से पहले 4 सेकंड प्रतीक्षा this fiddle देखें) होगा करने के लिए है कि कोड का उपयोग नहीं कर सकते हैं। आप निम्नलिखित आवश्यकता होगी:

function timeoutFunction() { 
    alert('Click OK to Continue'); // timing ACTUALLY stops until user hits ok 
    setTimeout(timeoutFunction, 4000); 
} 
setTimeout(timeoutFunction,4000); 

कौन सा कुछ है कि आप (ठीक - lightboxes पर ऊपर देखें) लागू नहीं कर सकते है देशी पॉपअप के बिना।

यहां तक ​​कि while(true) लूप आम तौर पर पॉपअप के साथ-साथ पॉपअप नहीं करेंगे - फ़ायरफ़ॉक्स में कम से कम एक "स्टॉप स्क्रिप्ट" संदेश होता है जो बहुत लंबे समय तक चलने के बाद पॉप अप करता है, और मुझे पूरा यकीन है कि अन्य प्रमुख ब्राउज़र भी ऐसा करते हैं।

+0

ठीक है, अगर किसी को जावास्क्रिप्ट एसिंक फ़ंक्शन को ओवरराइड करने की आवश्यकता है तो क्या होगा? (उदाहरण के लिए उपयोगकर्तास्क्रिप्ट) –

+0

@ TomášZato मुझे यकीन नहीं है कि मैं समझ रहा हूं कि आप क्या पूछ रहे हैं ... – Jeff

+0

कल्पना कीजिए कि आपको कस्टम अवरोधन समारोह के साथ 'अलर्ट' ओवरराइड करना था, उदाहरण के लिए। एक AJAX कॉल या कुछ समान पागलपन। यदि आपका जीवन इस पर निर्भर करता है, तो आप इसे कैसे करेंगे? –

0

कोई मजबूर करने के लिए सक्षम किया जा रहा में दिलचस्पी रखता हूँ, आप नहीं कर सकते (कम से कम नहीं एक ब्राउज़र में)। जावास्क्रिप्ट एपीआई ज्यादातर async हैं। alert/prompt अपवाद हैं। हालांकि, एसिंक संकेतों और कॉलबैक के साथ काम करना बहुत मुश्किल नहीं है।

+0

यह भ्रामक है। इसका तात्पर्य है कि "चेतावनी को छोड़कर सबकुछ" एसिंक है, जो झूठा है। बेशक, 'जबकि (सच) {1; } 'केवल इतना है (यानी बहुत नहीं) मजेदार है और एक अनुत्तरदायी पृष्ठ उत्पन्न करता है .. –

+4

'जबकि (सत्य)' नहीं है और एपीआई, यह एक भाषा निर्माण है! –

+2

तो अपना "जावास्क्रिप्ट एपीआई" चुनें। कहें, 'getElementById'। यह * * * समकालिक नहीं है। –

-1

एक वर्ष सा है, लेकिन मामले में यह मदद करता है, मैं अपने समाधान इस के साथ मिल गया है: दुर्भाग्य से कोई

var answer = confirm("are you sure?"); if(!answer)return;