2013-07-23 11 views
6

कहें कि मेरे पास एक ब्राउज़र एक्सटेंशन है जो उपयोगकर्ता के जेएस पेज चलाता है।क्या यह जानना संभव है कि उपयोगकर्ता ने किसी पृष्ठ पर कितना समय व्यतीत किया है?

क्या कोई "आउटलोड" ईवेंट या गिनती शुरू करने की तरह कुछ है और देखें कि उपयोगकर्ता ने पृष्ठ पर कितना समय व्यतीत किया है?

+0

वहाँ एक रास्ता है, तो आप एक js जरूरत that..you पर एक टाइमर आरंभ कर सकते हैं के लिए न है:

इसके साथ

आप एक प्रति चलाता है कि जब तक एक विधेय समारोह एक falsy मान देता है स्थापित कर सकते हैं pageload और अपने डेटाबेस में मूल्य डालने पर रखें। मैं आपको केवल एक डेमो देउंगा .. प्रतीक्षा करें 10 मिनट –

+2

सबसे अच्छा तरीका गिनती या टाइमर नहीं चलाएगा, लेकिन समय पर जांचने के लिए और पहले से लोड करें और अंतर की गणना करें। – Thor84no

उत्तर

5

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

यहाँ है कि मैं क्या सामग्री स्क्रिप्ट (jQuery का उपयोग) में क्या है:

$(window).on('unload', window_unfocused); 
$(window).on("focus", window_focused); 
$(window).on("blur", window_unfocused); 
setInterval(focus_check, 300 * 1000); 

var start_focus_time = undefined; 
var last_user_interaction = undefined; 

function focus_check() { 
    if (start_focus_time != undefined) { 
     var curr_time = new Date(); 
     //Lets just put it for 4.5 minutes                     
    if((curr_time.getTime() - last_user_interaction.getTime()) > (270 * 1000)) { 
      //No interaction in this tab for last 5 minutes. Probably idle.            
      window_unfocused(); 
     } 
    } 
} 

function window_focused(eo) { 
    last_user_interaction = new Date(); 
    if (start_focus_time == undefined) { 
    start_focus_time = new Date();                
    } 
} 

function window_unfocused(eo) { 
    if (start_focus_time != undefined) { 
    var stop_focus_time = new Date(); 
    var total_focus_time = stop_focus_time.getTime() - start_focus_time.getTime(); 
    start_focus_time = undefined; 
    var message = {}; 
     message.type = "time_spent"; 
     message.domain = document.domain; 
     message.time_spent = total_focus_time; 
     chrome.extension.sendMessage("", message); 
    } 
} 
2
<script type="text/javascript"> 

function send_data(){ 
      $.ajax({ 
       url:'something.php', 
       type:'POST', 
       data:{data to send}, 
       success:function(data){ 
       //get your time in response here 
       } 
      }); 
     } 
//insert this data in your data base and notice your timestamp 


window.onload=function(){ send_data(); } 
window.onbeforeunload=function(){ send_data(); } 

</script> 

अब अपने समय में अंतर की गणना करें। आपको किसी पृष्ठ पर उपयोगकर्ता द्वारा समय व्यतीत होगा।

+0

'setInterval' गारंटी नहीं देता है कि आपके फ़ंक्शन को' 'अलग-अलग समय कहा जाएगा, यह एक सर्वोत्तम प्रयास प्रयास करता है। वास्तव में आप समय की जांच करना चाहते हैं, मान लीजिए कि यह वास्तव में आपके द्वारा अपेक्षित समय की मात्रा है। – Thor84no

+0

समझा, मेरे उत्तर –

+0

संशोधित करेगा मैं अनुरोध के साथ अपने सर्वर को हथौड़ा देने से चिंतित हूं - यह नहीं है कि यह क्या कर रहा है? –

3

onbeforeunload आपके अनुरोध को फिट करना चाहिए। पृष्ठ संसाधनों को अनलोड किए जाने से पहले यह ठीक हो जाता है (पृष्ठ बंद)।

window.onbeforeunload = function() { 
    // Ajax request to record the page leaving event. 
    $.ajax({ 
     url: "im_leaving.aspx", cache: false 
    }); 
}; 

भी आप उपयोगकर्ता सत्र रखने के लिए:

1

start_time पेज छोड़ देता है उपयोगकर्ता पहले अनुरोध पेज और तुम सिर्फ उपयोगकर्ता से पहले सर्वर पर एक ajax अधिसूचना फायरिंग से end_time मिलता है जो एक ही पृष्ठ पर लंबे समय रहता है उपयोगकर्ताओं के लिए जिंदा (keep_alive.aspx एक खाली पृष्ठ हो सकता है):

var iconn = self.setInterval(
    function() { 
    $.ajax({ 
     url: "keep_alive.aspx", cache: false }); 
    } 
    ,300000 
); 

फिर, आप अतिरिक्त समय साइट पर खर्च कर सकते हैं, जाँच (हर बार उपयोगकर्ता छुट्टी द्वारा एक पृष्ठ है) यदि वह किसी बाहरी पृष्ठ/डोमेन पर जा रहा है।

+0

था क्या यह समाधान क्रॉस-ब्राउज़र काम करता है? –

+0

हां, यह क्रॉस-ब्राउज़र है। $ .ajax यहां jquery का उपयोग करता है, लेकिन इसे केवल जावास्क्रिप्ट के साथ किया जा सकता है: http://stackoverflow.com/questions/8567114/how-to-make-an-ajax-call-without-jquery –

+1

मेरा मतलब था, विंडो। onbeforeunload। मैंने मोज़िला देव पर जांच की और ऐसा लगता है कि आप सही हैं। मेरे लिये कार्य करता है। –

2

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

संपादित करें: मैंने वर्तमान API उपयोग को शामिल करने के लिए उदाहरण अपडेट किया है।

http://timemejs.com

इसके उपयोग का एक उदाहरण:

अपने पेज में शामिल करें:

<script src="http://timemejs.com/timeme.min.js"></script> 
<script type="text/javascript"> 
TimeMe.initialize({ 
    currentPageName: "home-page", // page name 
    idleTimeoutInSeconds: 15 // time before user considered idle 
}); 
</script> 

आप अपने बैकएंड बार अपने आप को रिपोर्ट करना चाहते हैं:

xmlhttp=new XMLHttpRequest(); 
xmlhttp.open("POST","ENTER_URL_HERE",true); 
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
var timeSpentOnPage = TimeMe.getTimeOnCurrentPageInSeconds(); 
xmlhttp.send(timeSpentOnPage); 

टाइममे।जेएस websockets के माध्यम से समय डेटा भेजने का भी समर्थन करता है, इसलिए आपको document.onbeforeunload ईवेंट में पूर्ण http अनुरोध को मजबूर करने की आवश्यकता नहीं है।

0

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

0

active-timeout.js आज़माएं। यह विज़िबिलिटी एपीआई का उपयोग यह जांचने के लिए करता है कि उपयोगकर्ता ने किसी अन्य टैब पर स्विच कब किया है या ब्राउज़र विंडो को कम किया है।

ActiveTimeout.count(function (time) { 
    // `time` holds the active time passed up to this point. 
    return true; // runs indefinitely 
}); 
संबंधित मुद्दे

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