2012-01-04 17 views
13

मैं जिस एप्लिकेशन को विकसित कर रहा हूं वह पेज के हिस्सों को रीफ्रेश करने के लिए jQuery मोबाइल और कुछ अजाक्स के आसपास बनाया गया है। स्वचालित रीफ्रेश का उपयोग करने वाली साइटों की तरह, मैं कुछ शर्त (समय/दृश्यता/आदि) के बाद रीफ्रेश को रोकना चाहता हूं, इसलिए मेरा सर्वर अनियंत्रित अनुरोधों के साथ बमबारी नहीं है। एप्लिकेशन में एक स्टेटस स्क्रीन होती है जिसे आम तौर पर उपयोगकर्ता द्वारा चेक किया जाता है, और आदर्श रूप से मेरी स्क्रिप्ट्स जानती हैं कि ब्राउजर विंडो फोकस में आई है और यह रीफ्रेश करने का एक अच्छा समय होगा। मैं डेस्कटॉप webapps में पहले इस किया है, लेकिन मैं विभिन्न प्लेटफार्मों और ब्राउज़रों के बीच मोबाइल पक्ष पर भिन्नता का एक बहुत देख रहा हूँ, उदाहरण के लिए:मोबाइल उपकरणों पर ब्राउज़र फोकस का पता कैसे लगाएं?

  • window.onfocus()/होती जब आग नहीं ब्राउज़र लाभ ध्यान केंद्रित
  • window.onfocus()/आग नहीं करता है जब टैब एक ब्राउज़र में बंद कर रहे हैं
  • जावास्क्रिप्ट/टैब स्विच के बीच निलंबित नहीं किया गया है और/या ब्राउज़र से दूर स्विच

सबसे अच्छा मैं अब तक करने में सक्षम हूं हेरिस्टिक्स का एक सेट है जो उपलब्ध घटनाओं को देखता है + जब वहां था पेज के साथ टेक्ट किए गए उपयोगकर्ता इंटरैक्शन, लेकिन यह घबराहट है और ऐसे मामलों में परिणाम जहां उपयोगकर्ता पृष्ठ पर वापस कूदता है और मैन्युअल रूप से रीफ्रेश करना पड़ता है। महान नहीं।

इसे हल करने के लिए कोई चालाक तकनीक?

+0

उपयोगकर्ता इनपुट की जांच करने के लिए एक वैकल्पिक समाधान हो सकता है। जब भी उपयोगकर्ता पृष्ठ के साथ इंटरैक्ट करता है, तो आप वर्तमान समय को एक चर में सेट करते हैं। इस तरह आप एक नियम बना सकते हैं जो पृष्ठ को अंतिम मिनट या दो के लिए उपयोग किया गया हो तो केवल अजाक्स कॉल को ट्रिगर करता है। –

+0

मैं वर्तमान में यह कर रहा हूं। यह मदद करता है, लेकिन मेरे आवेदन में आम मामला है जहां उपयोगकर्ता बस वेब पेज पर स्विच करता है या स्थिति को देखने के लिए अपने फोन को अनलॉक करता है (कोई बातचीत आवश्यक नहीं है)। – LVB

उत्तर

4

यदि आप सिर्फ यह जानना चाहते हैं कि ब्राउज़र विंडो फ़ोकस से बाहर है या नहीं, तो अनुरोध एनीमेशन फ़्रेम फ़ंक्शन का उपयोग करें।

window.requestAnimFrame = window.requestAnimationFrame || 
          window.mozRequestAnimationFrame || 
          <add browsers here> 

फिर अपने कोड में

var lastupdate = new Date() 
(function loop() { 
     var now = new Date(); 

     if (now - lastupdate > <some treshold like 1 second>) { 
      // browser was suspended and did come back to focus 
     } 
     lastupdate = now; 

     window.requestAnimFrame(loop); 
})(); 

चाल है कि ब्राउज़र एनीमेशन फ्रेम देना नहीं है अगर टैब या विंडो फोकस से बाहर है, है। सामान्य सेट इंटरवल और सेटटाइमआउट अभी भी काम करेंगे। खिड़की पर ध्यान केंद्रित होने पर यह लूप लगातार चलेंगे, लेकिन ओवरहेड न्यूनतम है, इसे मोबाइल उपकरणों में प्रति सेकंड 3-5 बार कहा जाता है।

+0

मैं इसे देख लूंगा। मेरा तत्काल प्रश्न (बिना जांच के) यह कितना व्यापक रूप से समर्थित होगा। धन्यवाद। – LVB

+2

यह आईई 9, फ़ायरफ़ॉक्स, क्रोम, सफारी, एंड्रॉइड और आईओएस डिवाइस (अधिकांश अन्य मोबाइल में भी) में काम करता है। यह किसी भी पुराने ब्राउज़र में AFAIK काम नहीं करता है जो HTML5 कैनवास का समर्थन नहीं करता है। –

+1

इस सूची के अनुसार, यह मोबाइल ब्राउज़र में अच्छी तरह से समर्थित नहीं है। http://caniuse.com/#feat=requestanimationframe ... लेकिन पोस्ट एक उज्जवल दृश्य देता है: http://paulirish.com/2011/requestanimationframe-for-smart-animating/ – LVB

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