2010-09-24 9 views
8

मैंने यहां खोज की और उपयोगकर्ता को पृष्ठ पर निष्क्रिय होने पर कार्रवाई करने के लिए एक त्वरित समाधान मिला। यह मूल रूप से सभी ब्राउज़रों पर अच्छी तरह से काम करता है।Google क्रोम पर सेटटाइमआउट() के साथ अजीब समस्या

लेकिन जब मैं पृष्ठ पर एक चेतावनी या पुष्टि संवाद का उपयोग करता हूं, तो Google Chrome पर अजीब समस्या होती है।

चेतावनी या पुष्टि बॉक्स गायब होने के बाद (ठीक है, रद्द या क्रॉस दबाया गया), निष्क्रिय कार्य अप्रत्याशित रूप से काम करता है।

  • बॉक्स करें और अलर्ट बॉक्स गायब हो जाता करने के बाद, जो लिंक के से आया onclick, मुझे मिल गया '3 सेकंड से पारित कर दिया' बॉक्स तुरंत

एफएफ, IE और क्रोम पर परीक्षण किया गया (नवीनतम)। यह सिर्फ क्रोम पर होता है।

मेरे कोड यहाँ है: http://jsbin.com/ifule3

window.onload = idleTimer; 
    function idleTimer() { 
    var idleDuration; 
    document.onmousemove = idleReset; 
    function idleReset() { 
     if (idleDuration) { 
     clearTimeout(idleDuration); 
     idleDuration = 0; 
     } 
     idleDuration = setTimeout(function() { 
     alert('3 seconds passed.'); 
     }, 3000) 
    } 
    }; 

<a onclick="if(confirm('?')) { alert('Ok Pressed.') } else { return false; };">First Link!</a> 
<a onclick="alert('test');" >Second Link!</a> 

ऐसा लगता है मेरी स्पष्टीकरण पर्याप्त नहीं है:/

मैं jQuery के साथ कोड बदल दिया;

jQuery(document).ready(function() { 
    var idleDuration; 
    jQuery(document).mousemove(function() { 
     if (idleDuration) { 
      clearTimeout(idleDuration); 
      idleDuration = 0; 
     } 

     idleDuration = setTimeout(function() { 
      someIdleAction(); 
      window.location = 'some url'; 
     }, 3000) 
    }) 
}); 

जब मैं अपने कोड पर यह कोड डालता हूं। यह एक आकर्षण की तरह काम करता है। मैं पृष्ठ खोलता हूं, कुछ माउस क्रिया करता हूं या नहीं, फिर माउस को घुमाने के बिना 3 सेकंड, मुझे निष्क्रिय अलर्ट मिल गया। यही मुझे चाहिए।

जब मैं एक लिंक डालता हूं जो बस एक अलर्ट बॉक्स को कॉल करता है और उस पर क्लिक करता है, तो अलर्ट बॉक्स दिखाई देता है। फिर मैंने बॉक्स बंद कर दिया और मुझे निष्क्रिय अलर्ट मिला जो '3 सेकंड पास' है।

<a onclick="if(confirm('Are you OK?')) { alert('Nice.') } else { return false; };">First Link!</a> 
    <a onclick="alert('An alert.');" >Second Link!</a> 

यह Google क्रोम पर होता है। आईई और एफएफ के साथ सबकुछ ठीक है। टाइमआउट बढ़ाने, कुछ भी नहीं बदलता है।

+3

* "... निष्क्रिय कार्य अप्रत्याशित रूप से काम करता है।" * अप्रत्याशित रूप से ** कैसे **?!? –

+3

स्टैक ओवरव्लो में आपका स्वागत है। कुछ अन्य साइटों के विपरीत, लक्ष्यों में से एक स्टैक ओवरव्लो * अकेले खड़े * के लिए है। हर तरह से आपके द्वारा किए गए लाइव उदाहरणों को जोड़ने के लिए लिंक करें, लेकिन उस कोड को शामिल करें जिसका आप अपने प्रश्न में उपयोग कर रहे हैं (यही कारण है कि यी जियांग ने इसे आपके लिए वहां कॉपी किया)। लिंक रोट आसानी से सेट हो सकता है (बाहरी संसाधन हटा दिए जाते हैं, नाम बदलते हैं, आदि) और इसके अलावा, लोगों को कहीं और नहीं जाना चाहिए यदि वे देख सकें कि सवाल से क्या गलत है। मज़े करो! –

+0

@ टीजे। क्रॉउडर, मूल रूप से, ** हल्क स्मेश !! ** = डी –

उत्तर

1

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

+0

समस्या यह है कि यदि आप तुरंत दूसरे लिंक पर क्लिक करते हैं, और तुरंत अलर्ट बॉक्स बंद करते हैं, तो एक दूसरा अलर्ट बॉक्स दिखाई देगा, जिसमें "3 सेकंड पास" होगा, भले ही आपने यह सब 3 सेकंड से कम समय में किया हो ... (क्या यह टिप्पणी समझ में आ रही है?) –

+0

@ क्रॉडर - क्या आईई/एफएफएक्स सेटटाइमआउट "थ्रेड" दबाता है जब एक अलर्ट/पुष्टिकरण बॉक्स दिखाई देता है, जबकि क्रोम बस "धागा" जारी रखता है? (क्षमा करें मेरी आलस्य - मेरी मशीन पर इसे सत्यापित करने के लिए समय नहीं है।) – DashK

+0

@Golmote: हाँ यह है। जब आप टाइमआउट बढ़ाते हैं तो कुछ भी नहीं बदलता है। सिर्फ परीक्षण के लिए 3 सेकंड। – egon

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