2011-08-23 14 views
10

Ben onbeforeunloadKullanıcı sitemi ne zaman terk ettiğini, sadece farklı bir sayfaya gitmeyi nasıl algılayabilir?

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"; 
    } 
} 

için bir işleyici var ama onlar sayfadaki tıklandığında url site içinde olup olmadığını bilmek nasıl emin değilim.

Sadece siteden ayrılacaklarsa onları uyarmaları istiyorum.

+21

bunu yapmayın lütfen - onlar siteyi gideceğini biliyorum - onlar linki tıkladım. Bu tür bir şey javascript'e kötü bir isim veriyor. –

+1

Mümkün yinelenen [javascript onbeforeunload olayı hedef URL'yi nasıl alabilirim?] (Http://stackoverflow.com/questions/1686687/how-can-i-get-the-destination-url-in-javascript-onbeforeunload -event) –

+0

2 UP oy? .... – Nivas

cevap

17

Bunu% 100 güvenilir bir şekilde yapmak mümkün değildir, ancak kullanıcının sayfanızdaki bir bağlantıyı tıkladığında tespit ederseniz, bunu çoğunlukla doğru bir sinyal olarak kullanabilirsiniz. Böyle bir şey: Orada

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

Çok güzel ve göze çarpmayan bir çözüm olan –

1

Tek bir fikrim var ama işe yarayıp yaramadığını bilmiyorum. Benim önerim, her bağlantıya bir işlev çağrısı ile bir onClick olayı eklemek. Bu işlev sadece href özniteliğini okur ve global kapsamda bir değişkende saklar.

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

ve verilen işlevinde

:

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

Sadece bir fikirdi, ama bence öyle

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

bir etiketleri için html aşağıdaki gibi görünüyor olmalı denemeye değer.

0

web sitesi hem mutlak ve göreli yerel bağlantıları olabilir çünkü sorun yaşıyorsanız, ben (jQuery kullanarak) başka bir çözüm var web sitemde son zamanlarda uygulamış olduğum iyi bir çözüm. Bunu hayal edin, web sitenizde dolaşan her şey, kullanıcılara giden bir bağlantı (bağlantı etiketi), düğme, tıklanabilir resim veya bu satırlarda bir şey olacak. Kesinlikle vücut unsuru olmayacak.

Artık bir kullanıcı web sitesinden ayrıldığında, bir URL yazıp enter'a basabilir, bir yer imini tıklayabilir veya geri/ileri düğmelerine basabilir. Bir kullanıcı bunu geldiğinde

Bunu yapmak:

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

ne olur vücut (kullanıcı web sitesine ayrıldığında) bu durumlarda hedefin aktif eleman haline gelir ve bu durum olmadığıdır Kullanıcı dahili web sitesi gezinilebilir öğelerini tıkladığında.

Bu, temiz ve kolay bir çözümdür. Herhangi bir sorunla karşılaşırsanız bana bildirin.

-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

ama bu işlem de yenilendiğinde gerçekleşecek .. – Gags

İlgili konular