2009-12-03 14 views
6

में टैब दृश्यता का पता लगाना मैं एक वेबपैप लिख रहा हूं जो प्रत्येक मिनट या फिर कार्रवाई करता है (बहुत संक्षिप्त रूप से) ब्राउज़र को लटकता है। जब मैं वेबपैप प्रदर्शित करने वाला टैब दिखाता हूं, तो मैं इस क्रिया को रोकना चाहता हूं, परेशानियों को कम करने के लिए। क्या फ़ायरफ़ॉक्स के नवीनतम संस्करण के तहत जावास्क्रिप्ट का उपयोग करके ऐसा करने का कोई तरीका है?फ़ायरफ़ॉक्स

संपादित करें: स्पष्ट करने के लिए, मैं टैब के दृश्यता को निर्धारित करने के तरीके के बारे में पूछ रहा हूं कि कुछ जेएस कोड चल रहा है - ब्राउजर को लटकाए गए क्रिया को रोकने/फिर से शुरू करने के तरीके के बारे में नहीं।

उत्तर

7
var isFocused = true; 

window.onblur=function(){ 
    if(isFocused==true){ 
    isFocused=false; 
    } 
} 

window.onfocus = function(){ 
    isFocused = true; 
} 

अब, आप जो क्रिया करते हैं, हर मिनट या दो, केवल तभी करें जब फोकस किया गया हो। वह तब होता है जब आपके पृष्ठ/वेबपैप का टैब केंद्रित होता है।

+0

क्यों if (isFocused == true) जांचें? –

+0

मैं डिबगिंग के दौरान एक चेतावनी का उपयोग कर रहा था, जब यह दिखाया गया, तो उसने धुंधला घटना भी निकाल दी और यह कुल गड़बड़ थी: डी। साथ ही, फ़ायरफ़ॉक्स वास्तविक समय में टैब स्विचिंग के बारे में जावास्क्रिप्ट को बहुत सटीक रूप से पहचान और सूचित नहीं करता है। (मुझे अनुभव विकसित विकास से पता है) कभी-कभी, इन घटनाओं के लिए दो बार आग लगाना संभव है ... आपके कोड के आधार पर, यह हानिरहित हो सकता है या पूरी तरह से आपको पेंच कर सकता है। इसलिए, मैं केवल यह सुनिश्चित कर रहा हूं कि आप चर को 'unfocussed' पर सेट करें, अगर यह अभी केंद्रित है। इसे 'फोकस' क्यों करें जब यह पहले से ही 'फोकस' हो? क्या मैं कह रहा हूँ? –

+0

मैं देखता हूं। लेकिन यदि कथन केवल तभी समझ में आता है यदि आप वास्तव में इसके अंदर कुछ कर रहे हैं (कुछ ऐसा जो आपके पृष्ठ को पेंच करेगा यदि आप इसे पंक्ति में दो बार निष्पादित करेंगे)। इस ठोस मामले में यह पूरी तरह से अनावश्यक है, क्योंकि इससे कोई फर्क नहीं पड़ता कि चर एक ही मूल्य पर दो बार सेट किया गया है ... –

2

जांची नहीं है, लेकिन कैसे इस बारे में:

window.onblur() = function() { ... pause your script here }

मैं अगर फ़ायरफ़ॉक्स अलग-अलग विंडो के रूप में टैब में खिड़की कलंक संभालती है पता नहीं है।

+0

मैंने अभी कोशिश की है और यह काम करता है (ध्यान दें कि मैंने ईवेंट हैंडलर को ऑनब्लर से अटैच करने के लिए jQuery का उपयोग किया था)। –

+0

इस तथ्य के अलावा कि 'onblur()' केवल 'onblur' होना चाहिए, मुझे लगता है कि यह काम कर सकता है। हालांकि, मैं वास्तव में क्या करना चाहता हूं यह जांचने में सक्षम है कि विंडो वर्तमान में केंद्रित है या नहीं। –

1

मुझे विश्वास है कि आपको window.onblur ईवेंट के साथ करना होगा, क्योंकि किसी वेबपृष्ठ में किसी स्क्रिप्ट से ब्राउज़र विंडो तक पहुंच को सुरक्षा कारणों से केवल प्रतिबंधित किया गया है (केवल विशेषाधिकार प्राप्त स्क्रिप्ट के लिए अनुमति है)।

आप क्या करना चाहते हैं (एक बच्चे विंडो या वेबपृष्ठ के भीतर से ब्राउज़र विंडो तक पहुंचें) Mozilla Developer Center में वर्णित है, लेकिन यह उल्लेख करता है कि केवल एक विशेषाधिकार प्राप्त स्क्रिप्ट यह कर सकती है, और आपको शायद " जब आप कोशिश करते हैं तो "त्रुटि अस्वीकार कर दी गई।