2012-02-07 14 views
5

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

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

A flowchart of the page update algorithm

मैं इस छोटे से परीक्षण कोड विकसित कैसे पेज घटनाओं काम को देखने के लिए (see live on jsFiddle):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
<script type="text/javascript"> 
function m(msg){ 
    document.getElementById("logplace").innerHTML+=msg+"<br/>"; 
} 
</script> 
</head> 
<body onblur="m('Blur')" onerror="m('Error')" onfocus="m('Focus')" onload="m('Load')" onresize="m('Resize')" onunload="m('Unload')"> 
<span id="logplace"></span> 
</body> 
</html> 

मैं पेज की जरूरत केवल उपयोगकर्ता अगर अद्यतन होने के लिए इस एल्गोरिथ्म है वर्तमान में इसे देख रहा है। मैं Stackoverflow खोज की है और निम्नलिखित सूत्र जवाब होने लगते नहीं है:

पी एस। JQuery सर्वर पर भी मौजूद है। लेकिन अगर कोई आसान तरीका है, तो मैं JQuery का उपयोग नहीं करना पसंद करता हूं।

+0

सही सवाल नहीं पूछा था। क्या यह पृष्ठ देखा जा रहा है तेह कुंजी बिट है। जवाब हालांकि विभिन्न और संभावित रूप से iffy हैं। Http://stackoverflow.com/questions/354718/detect-which-form-input-has-focus-using-javascript-or-jquery –

+0

अपने लिंक का प्रश्न फ़ोकस वाले पृष्ठ तत्व के बारे में है। मैं पूरे पृष्ठ को देख या नहीं देख रहा हूं। – AlexStack

+0

पृष्ठ एक तत्व है, उसी तरह की समस्या .... –

उत्तर

0

जहाँ तक मैं देख सकता हूं कि आपके पास आपके डीबी में पृष्ठ सूची है। आप is_viewed नामक एक फ़ील्ड जोड़ सकते हैं और जब भी उपयोगकर्ता पृष्ठ में प्रवेश करता है और प्रत्येक बार पृष्ठ से बाहर निकलता है तो +1 द्वारा इसे अपडेट कर सकता है। तो अगर यह == 0 है तो आप अपना चेक कर सकते हैं।
मुझे किसी अन्य पृष्ठ पर क्या चल रहा है यह देखने के लिए कोई अन्य तरीका नहीं (अजाक्स नहीं)। तो तुम

+0

यह एक दिलचस्प समाधान है। मुझे अभी भी "सुनने" की आवश्यकता है, यहां तक ​​कि जब वर्तमान पृष्ठ "ब्लूअर" या "दर्ज" किया जा रहा है तब भी ट्रिगर किया जाता है। जब भी कोई उपयोगकर्ता किसी दूसरे पर स्विच करने की बजाय टैब बंद करता है तो मुझे विशेष केस को संभालने की भी आवश्यकता होती है। – AlexStack

+0

मुझे "धुंधला" घटना के बारे में निश्चित नहीं है, लेकिन करीब और छोड़ने और दर्ज करने के लिए जावास्क्रिप्ट ईवेंट – lvil

+0

मैंने कोशिश की और कुछ कोड का उपयोग करके मेरा प्रश्न अपडेट किया। अभी भी पूरी तरह से समस्या का समाधान नहीं करता है। फ्रांसिस के जवाब पर मेरी टिप्पणियां देखें। – AlexStack

4
var focused = false; 

function onBlur() { 
    focused = false; 
}; 
function onFocus(){ 
    focused = true; 
}; 

if (/*@[email protected]*/false) { // check for Internet Explorer 
document.onfocusin = onFocus; 
document.onfocusout = onBlur; 
} else { 
window.onfocus = onFocus; 
window.onblur = onBlur; 
} 

फिर अपने जावास्क्रिप्ट जांच कर सकते हैं वैसे भी अनुरोध भेजने के लिए होगा

if (focused) 
{ 
    // process ajax 
} 

स्रोत: http://www.thefutureoftheweb.com/blog/detect-browser-window-focus

चेक बाहर डेमो वह इतना बनाया आप कार्रवाई में इसे देख सकते हैं: http://www.thefutureoftheweb.com/demo/2007-05-16-detect-browser-window-focus/

यह ध्यान में रखते हुए, यदि आपका पृष्ठ अपडेट करने के लिए अंतराल टाइमर का उपयोग करता है, जब विंडो फोकस खो देती है, तो आप अंतराल को मार सकते हैं, फिर sta खिड़की केंद्रित है जब यह फिर से आरटी।

+0

यह एक जो चाहता है उसके बहुत करीब है लेकिन एक समस्या है: उपयोगकर्ता के पास दो या अधिक डिस्प्ले स्क्रीन हैं जो इस वेब पेज को उनमें से एक में खोलती हैं और अन्य डिस्प्ले स्क्रीन पर काम करती हैं। पेज को अभी भी अपडेट नहीं किया जाना चाहिए, भले ही यह ध्यान केंद्रित न हो *** लेकिन फिर भी दिखाई दे रहा है ***। पृष्ठ को अपडेट नहीं किया जाना चाहिए, जब यह दिखाई नहीं दे रहा है (जब ब्राउज़र कम हो जाता है या जब उपयोगकर्ता किसी अन्य टैब पर स्विच हो जाता है)। – AlexStack

+0

फोकस की जांच करने के अलावा जावास्क्रिप्ट को बताने का कोई तरीका नहीं है। –

0

मैं प्रस्ताव करता हूं कि जब आप विंडो शुरू करते हैं (जिसे आप केवल तभी दिखाना चाहते हैं) तो आप इसे एक मास्टर विंडो से शुरू करते हैं, या दूसरी विंडो जो फोकस करती है। फ्रांसिस द्वारा फोकस समाधान और निम्नलिखित तकनीक को संयोजित करें जिससे आप विंडो के डीओएम को दूसरे से एक्सेस कर सकें।

अधिक जानकारी के लिए आप here देख सकते हैं। मूल रूप से आप पेज खोलने के लिए और जावास्क्रिप्ट का उपयोग कर pageControl चर के माध्यम से इसे उपयोग करने में सक्षम होने के लिए निम्नलिखित कोड

var pageControl=open('page.html','page name','width=200,height=200') 

का प्रयोग करेंगे।

यह समस्या को हल करता है जब आप खिड़कियों पर ध्यान केंद्रित करते हैं, दूसरी विंडो से या मास्टर विंडो से अद्यतनों को नियंत्रित करते हैं। यहां से एकमात्र संभावित रोडब्लॉक संगतता होगी।

एक मास्टर विंडो समाधान थोड़ा और अधिक शामिल हो सकता है। लेकिन अगर आप इसे दूसरी विंडो से करना चाहते हैं तो आप कल्पना कर सकते हैं कि अगर आपको कोई खिड़की फोकस नहीं मिलती है तो आप अपडेट स्क्रिप्ट को फायर नहीं करेंगे .. अन्यथा इसे फायर करें!

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