2009-07-31 23 views
8

मुझे एक जावास्क्रिप्ट टाइमर मिला है जो निरंतर आधार पर XMLHTTP अनुरोध कर रहा है (प्रत्येक 10 सेकंड में एक बार)। जब खिड़की या टैब फोकस खो देता है तो मुझे टाइमर को रोकने में सक्षम होना अच्छा लगेगा।क्या यह निर्धारित करने का कोई विश्वसनीय तरीका है कि ब्राउज़र टैब या विंडो निष्क्रिय है या नहीं?

मुझे onFocus और onBlurwindow ऑब्जेक्ट पर ईवेंट पूरी तरह से अवगत है, लेकिन वे सभी ब्राउज़रों में विश्वसनीय रूप से आग नहीं लगाते हैं। उदाहरण के लिए, in Safari, tabs don't trigger the events

<html> 
    <head> 
    <title>Testing</title> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.2/prototype.js"></script> 
    </head> 
    <body> 
    <div id="console"></div> 
    <script type="text/javascript"> 
     window.onfocus = function(event) { 
     $('console').insert('Window gained focus<br />'); 
     } 

     window.onblur = function(event) { 
     $('console').insert('Window lost focus<br />'); 
     } 
    </script> 
    </body> 
</html> 

है वहाँ किसी को भी निर्धारित करते समय एक ब्राउज़र विंडो या टैब खो देता है/लाभ फोकस है कि सभी लोकप्रिय ब्राउज़रों में में काम करता है के लिए एक तकनीक है:

सरल नीचे कोड कार्यक्षमता मैं तलाश कर रहा हूँ distills?

+0

, इस फ्लैश का उपयोग कर व्याख्या करने योग्य नहीं है। http://stackoverflow.com/questions/1099063/detecting-embedded-object-focus-in-safari – jedierikb

+0

संभावित डुप्लिकेट [क्या यह पता लगाने का कोई तरीका है कि कोई ब्राउज़र विंडो वर्तमान में सक्रिय नहीं है?] (http: // stackoverflow .com/प्रश्न/1060008/is-a-way-to-detect-if-a-browser-window-is-not-current-active) – rvighne

उत्तर

3

उपर्युक्त कोड Safari v3.0.4 (वेबकिट 530+) में ठीक काम कर रहा है, यह बग हल हो गया है। मैंने इसे Google Chrome v3.0.195.27 में चेक किया है और इसमें एक ही सफारी बग है, हालांकि इसमें वेबकिट का एक नया संस्करण है।

+0

आप सही हैं कि सफारी के हाल के संस्करण इसे संभालते हैं, और क्रोम नहीं करता है। मैं बस यह कहने जा रहा हूं कि मेरे उद्देश्यों के लिए, शीर्ष 4 में से 3 का समर्थन बुरा नहीं है। –

+0

क्रोम v3.0.195.38 अजीब व्यवहार कर रहा है। यह टैब स्विच पर घटनाओं को फायर करता है लेकिन केवल तभी जब कम से कम एक विंडो स्विच होता है। – detj

0

इस तरह की चीज़ खोजने के लिए मेरे पिछले हताश प्रयासों ने मुझे निष्कर्ष निकाला है कि ऐसा कोई जानवर नहीं है।

ओह, मैं गलत कैसे होना पसंद करूंगा।

2

इस विषय के बारे में एक और स्टैक ओवरफ़्लो प्रश्न है। उन्होंने टैबड ब्राउज़िंग समस्या को संबोधित नहीं किया। वे एक लिंक देते हैं जो कुछ विस्तार में जाता है, हालांकि jquery का उपयोग किए बिना।

Is there a way to detect if a browser window is not currently active?

मुझे नहीं लगता कि फोकस/कलंक घटनाओं पर सभी सफारी में टैब्ड ब्राउज़िंग के साथ काम करते हैं। कुछ लोगों ने माउस घटनाओं का सुझाव दिया है, जैसे माउसलेव/माउसएन्टर इस के लिए।

मुझे इस तरह के कुछ यूआई मुद्दे मिल गए हैं, इसलिए यदि मुझे कुछ पता चलता है तो मैं यहां का पालन करूंगा। विचार करने के लिए

-1

एक बात है कि टैबfocus/blur घटनाओं ब्राउज़र विक्रेताओं द्वारा अवरुद्ध किया जा रहा संभवतः उपयोगकर्ताओं को बचाने के लिए एक रास्ता है। कुछ ब्राउज़र alert() -स्टाइल पॉपअप (और यहां तक ​​कि, मुझे विश्वास है, focus() विधि) फ़ोकस प्राप्त करने के लिए एक टैब का कारण बनता है। टैब स्विचिंग के लिए focus/blur ईवेंट को अवरुद्ध करना, उदाहरण के लिए, अनिश्चित पॉपअप और विंडो आकार/स्थिति/समापन के खिलाफ सुरक्षा के समान हो सकता है।

+0

उसका मतलब है उन घटनाओं को सुनना, उन्हें स्वयं को फायर नहीं करना। – aehlke

0
<script> 

    // Adapted slightly from Sam Dutton 
    // Set name of hidden property and visibility change event 
    // since some browsers only offer vendor-prefixed support 
    var hidden, state, visibilityChange; 
    if (typeof document.hidden !== "undefined") { 
     hidden = "hidden"; 
     visibilityChange = "visibilitychange"; 
     state = "visibilityState"; 
    } else if (typeof document.mozHidden !== "undefined") { 
     hidden = "mozHidden"; 
     visibilityChange = "mozvisibilitychange"; 
     state = "mozVisibilityState"; 
    } else if (typeof document.msHidden !== "undefined") { 
     hidden = "msHidden"; 
     visibilityChange = "msvisibilitychange"; 
     state = "msVisibilityState"; 
    } else if (typeof document.webkitHidden !== "undefined") { 
     hidden = "webkitHidden"; 
     visibilityChange = "webkitvisibilitychange"; 
     state = "webkitVisibilityState"; 
    } 

    // Add a listener that constantly changes the title 
    document.addEventListener(visibilityChange, function() { 
     document.title = document[state]; 
    }, false); 

    // Set the initial value 
    document.title = document[state]; 

</script> 
मेरे अनुभव में
+2

कोड प्रदान करना अच्छा है जो किसी समस्या को हल करने में मदद कर सकता है। लेकिन इस साइट में हम जवाब देने की उम्मीद करते हैं कि क्यों और कैसे। कृपया अपनी पोस्ट में कुछ सटीक जोड़ें। –

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

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