2011-08-23 5 views
10

मैं onbeforeunloadमैं कैसे पता लगा सकता हूं कि उपयोगकर्ता मेरी साइट छोड़ रहा है, न केवल एक अलग पृष्ठ पर जा रहा है?

window.onbeforeunload = unloadMess; 
function unloadMess(){ 
    var conf = confirm("Wait! Before you go, please share your stories or experiences on the message forum."); 
    if(conf){ 
    window.location.href = "http://www.domain.com/message-forum"; 
    } 
} 

के लिए कोई हैंडलर है, लेकिन मुझे यकीन है कि पता है कि कैसे अगर यूआरएल वे पेज पर क्लिक किया साइट के भीतर है नहीं कर रहा हूँ।

मैं बस उन्हें चेतावनी देना चाहता हूं कि वे साइट छोड़ देंगे।

+21

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

+1

संभावित डुप्लिकेट [मैं जावास्क्रिप्ट पर गंतव्य यूआरएल कैसे प्राप्त कर सकता हूं?] (Http://stackoverflow.com/questions/1686687/how-can-i-get-the-destination-url-in-javascript-onbeforeunload -वेन्ट) –

+0

2 यूपी वोट? .... – Nivas

उत्तर

17

यह 100% विश्वसनीय रूप से करना संभव नहीं है, लेकिन यदि आप पता लगाते हैं कि उपयोगकर्ता ने आपके पृष्ठ पर किसी लिंक पर क्लिक किया है, तो आप इसे अधिकतर सही सिग्नल के रूप में उपयोग कर सकते हैं। कुछ इस तरह:

Demo

/* EXTERNAL LINK WARNING 
=========================================*/ 
$('a').on('click', function(e){ 
    e.preventDefault(); 
    var url = $(this).attr('href'), 
     host = location.host;  
    if (url.indexOf(host) > -1 || url.indexOf('http','https') == -1){ 
     /* If we find the host name within the URL, 
       OR if we do not find http or https, 
       meaning it is a relative internal link 
      */ 
     window.location.href = url; 
    } else { 
     var warn = confirm('You\'re leaving the domain.\n\nAre you sure?'); 
     if(warn == true) { 
      window.location.href = url,'_blank'; 
     } else { 
      e.preventDefault; 
     } 
    } 
}); 
+1

बहुत अच्छा और अविभाज्य समाधान –

1

मुझे एक विचार है, लेकिन मुझे नहीं पता कि यह काम है या नहीं। मेरा सुझाव है, प्रत्येक लिंक को एक फंक्शन कॉल के साथ ऑनक्लिक ईवेंट जोड़ें। वह फ़ंक्शन केवल वैश्विक विशेषता के साथ एक चर में href विशेषता और स्टोर पढ़ता है।

var clickedHrefAttrValue = ""; 
function getClickUrl(currentLink) 
{ 
    clickedHrefAttrValue = $(currentLink).attr("href"); 
    return true; 
} 

एक टैग के लिए एचटीएमएल ऐसा दिखाई देता होना चाहिए:

<a href="<url>" onClick="getClickUrl(this)">Linktext</a> 

और अपने दिए गए समारोह में:

function getClickUrl() 
{ 
    if (clickedHrefAttrValue.indexOf("<your condition>" > -1) 
    { 
    //what ever you want do to 
    } 
} 

यह सिर्फ एक विचार है, लेकिन मुझे लगता है कि यह है कोशिश करने के लायक है।

0

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

अब जब कोई उपयोगकर्ता वेबसाइट छोड़ देता है तो क्या होता है, वह या तो यूआरएल टाइप कर सकता है और एंटर दबा सकता है, एक बुकमार्क पर क्लिक कर सकता है या बैक/फॉरवर्ड बटन दबा सकता है।

एक उपयोगकर्ता क्या करता है जब कि, ऐसा करते हैं:

$(window).on('beforeunload', function(e)){ 
    if(e.target.activeElement.nodeName.toLowerCase() == 'body'){ 
     yourFunction(); 
}); 

क्या होता है कि शरीर (जब उपयोगकर्ता वेबसाइट छोड़ देता है) इन मामलों में लक्ष्य में सक्रिय तत्व बन जाता है और यह स्थिति नहीं है है जब उपयोगकर्ता आंतरिक वेबसाइट नेविगबल तत्वों पर क्लिक करता है।

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

-1

वहाँ:

window.localLinkClicked = false; 

$("a").live("click", function() { 
    var url = $(this).attr("href"); 

    // check if the link is relative or to your domain 
    if (! /^https?:\/\/./.test(url) || /https?:\/\/yourdomain\.com/.test(url)) { 
     window.localLinkClicked = true; 
    } 
}); 

window.onbeforeunload = function() { 
    if (window.localLinkClicked) { 
     // do stuff 
    } else { 
     // don't 
    } 
} 
+1

लेकिन यह क्रिया ताज़ा करने पर भी होगी .. – Gags

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

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