2010-12-06 6 views
13

Jedes Mal, wenn eine Seite angefordert wird, bekomme ich den Referrer der Seite, von der sie kam. Ich muss nur Referrer von anderen Seiten verfolgen, ich möchte nicht von einer Seite zur anderen innerhalb meiner Website zu verfolgen. Wie kann ich das machen?Wie kann ich feststellen, ob der document.referrer von meiner eigenen Website stammt?

+2

Wow, fragte die Frage, antwortete dann in weniger als 1 Minute mit einem Link zu Ihrer eigenen Website? – Martin

+2

Ich denke, eine Lösung zu posten ist eine gute Sache. Ich bin mir ziemlich sicher, dass andere das gleiche Problem haben. –

+0

das klingt doof – hoju

Antwort

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

Ursprünglich bei JavaScript - Am I the Referrer? geschrieben

Wenn jemand zum ersten Mal auf unsere Website kommt, speichern wir die Referrer in einem Cookie. Auf diese Weise können wir, wenn sie unsere Demo herunterladen, den ursprünglichen Referrer aus dem Cookie holen und wir erfahren, welche Websites bei der Werbung zu uns führen.

Natürlich zeigt jede nachfolgende Seite, die ein Besucher auf unserer Website besucht, den Referrer als unsere Website an. Wir wollen diese nicht. Was wir zuerst getan haben, um dies zu vermeiden, war die Suche nach dem Text "Luv" in der Referrer und wenn ja, nehmen wir an, dass das von unserer Website war. Das Problem damit ist, dass wir viele Referrer-URLs gefunden haben, die nun entweder als Suchbegriff oder Teil einer URL, die über Windward spricht, in Luv enthalten sind. (Das sind gute Nachrichten, das bedeutet, wir sind jetzt ein bekanntes Produkt.)

Das brachte mich zu unserem neuesten Ansatz. Dies sollte für jede Site funktionieren und nur Referrer von derselben Site ablehnen.

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

Bricht das nicht für 'https'? – Pureferret

+0

@Pureferret - ja, muss auch mit https umgehen. Dies wurde im Jahr 2010 geschrieben, als öffentliche Websites fast alle http waren. –

0

Solutions arbeitet im Fall der Nicht Sub-Domain in Website im Fall von Sub-Domain präsentiert ist es dann müssen wir selbst kurz vor der Domäne überprüfen, ob all Sub-Domains vorgestellt:

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

Diese Lösung fügt * vor der Domäne hinzu, um zu erkennen, dass die Unterdomäne aus derselben Domäne stammt.

0
document.referrer.includes(location.host); 
Verwandte Themen