2010-12-06 13 views
13

Sayfa istendiğinde, geldiği sayfanın yönlendiricisini alırım. Diğer sitelerden gelen yönlendiricileri izlemem gerekiyor, sitemde bir sayfadan diğerine gitmek istemiyorum. Bunu nasıl yapabilirim? Birisi ilk kez sitemize gelincedocument.referrer öğesinin kendi sitemden olup olmadığını nasıl belirleyebilirim?

+2

Vay, soru sordu, sonra kendi sitenize bir bağlantı ile 1 dakikadan kısa bir sürede yanıtladı? – Martin

+2

Bir çözüm göndermenin iyi bir şey olduğunu anladım. Eminim diğerleri de aynı soruna çarpıyor. –

+0

, aslında StackOverflow bu şekilde yararlı bir Soru Yanıtı göndermenizi önerir. Yeterli puan aldıktan sonra, bunu tek bir gönderimde yapabilirsiniz. – hoju

cevap

31
document.referrer.indexOf(location.protocol + "//" + location.host) === 0; 
1

Başlangıçta JavaScript - Am I the Referrer?

adresinde yayınlanan, bir çerez içinde yönlendirme saklayın. Bu sayede, demomuzu indirirseniz, orijinal yönlendiriciyi çerezden alabilir ve hangi sitelerin sürüş konusunda etkili olduğunu öğreniriz.

Elbette, web sitemizden bir ziyaretçi isabet eden her sayfa, yönlendireni web sitemiz olarak gösterecektir. Biz bunları istemiyoruz. Bunu önlemek için ilk yaptığımız şey, yönlendirendeki "rüzgarlı" metnini aramaktı ve eğer öyleyse, sitemizden olduğunu varsayalım. Bununla ilgili sorun, bir arama terimi veya Windward hakkında konuşulan bir URL'nin parçası olarak, artık çok sayıda yönlendirme URL'sinin kendileri için rüzgarlı olduğunu saptadık. (Bu iyi haber, şu anda iyi bilinen bir ürün olduğumuz anlamına geliyor.)

Böylece en son yaklaşımımıza ulaştı. Bu, herhangi bir site için çalışmalı ve yalnızca yönlendiricileri aynı siteden reddetmelidir.

function IsReferredFromMe() 
{ 

    var ref = document.referrer; 
    if ((ref == null) || (ref.length == 0)) { 
     return false; 
    } 
    if (ref.indexOf("http://") == 0) { 
     ref = ref.substring(7); 
    } 
    ref = ref.toLowerCase(); 

    var myDomain = document.domain; 
    if ((myDomain == null) || (myDomain.length == 0)) { 
     return false; 
    } 
    if (myDomain.indexOf("http://") == 0) { 
     myDomain = myDomain.substring(7); 
    } 
    myDomain = myDomain.toLowerCase(); 

    return ref.indexOf(myDomain) == 0; 
} 
+0

Bu https için ara vermiyor mu? – Pureferret

+0

@Pureferret - evet, https işlemek de gerekiyor. Bu, halka açık web sitelerinin neredeyse hepsinin http olduğu 2010 yılında yazıldı. –

0

Çözümler alt etki durumunda sitesinde hiçbir alt etki durumunda eserlerini sundu herhangi bir alt etki alanları sunulan eğer biz sadece alanın kendi önce kontrol etmek zorunda ardından vardır:

document.referrer.replace("http://", '').replace("https://", '').split('/')[0].match(new RegExp(".*" +location.host.replace("www.", ''))) 

Bu çözüm, alan adından önce bu alt alanın aynı etki alanından geldiğini ekleyecektir.

0
document.referrer.includes(location.host); 
İlgili konular