2010-12-06 14 views
13

Cada vez que se solicita una página obtengo la referencia de la página de donde proviene. Necesito rastrear referencias de otros sitios, no quiero seguir yendo de una página a otra dentro de mi sitio. ¿Cómo puedo hacer eso?¿Cómo puedo determinar si document.referrer es de mi propio sitio?

+2

Wow, hizo la pregunta, luego respondió en menos de 1 minuto con un enlace a su propio sitio? – Martin

+2

Me imagino que publicar una solución es algo bueno. Estoy bastante seguro de que otros tienen el mismo problema. –

+0

suena poco fiable – hoju

Respuesta

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

originalmente publicado en JavaScript - Am I the Referrer?

Cuando alguien viene a nuestro sitio web por primera vez, almacenamos la de referencia en una cookie. De esta forma, si descargan nuestra demostración, podemos obtener la referencia original de la cookie y nos enteramos de qué sitios son efectivos para dirigirnos.

Por supuesto, cada página subsiguiente que un visitante acceda a nuestro sitio web mostrará el referido como nuestro sitio web. No queremos esos. Lo primero que hicimos para evitar esto fue buscar el texto "a barlovento" en la referencia y, de ser así, asumir que era de nuestro sitio. El problema con esto es que descubrimos que una gran cantidad de URL de referencia ahora tienen barlovento en ellas, ya sea como un término de búsqueda o como parte de una URL que habla de Windward. (Esta es una buena noticia, significa que ahora somos un producto bien conocido).

Eso me llevó a nuestro enfoque más reciente. Esto debería funcionar para cualquier sitio y solo debería rechazar referencias del mismo sitio.

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

¿Eso no se rompe para 'https'? – Pureferret

+0

@Pureferret - sí, también necesita manejar https. Esto fue escrito en 2010 cuando los sitios web públicos eran casi todos http. –

0

soluciones que se presentan obras en caso de no subdominio en el sitio web en caso de sub dominio es allí entonces tenemos que comprobar justo antes del dominio propio si algún dominio sub presentan:

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

esta solución se agregará. * Antes del dominio para detectar que el subdominio es del mismo dominio.

0
document.referrer.includes(location.host); 
Cuestiones relacionadas