Как я могу определить, является ли document.referrer моим собственным сайтом? - PullRequest
15 голосов
/ 06 декабря 2010

Каждый раз, когда запрашивается страница, я получаю ссылку на страницу, с которой она пришла.Мне нужно отслеживать только реферера с других сайтов, я не хочу отслеживать переход с одной страницы на другую на моем сайте.Как я могу это сделать?

Ответы [ 5 ]

37 голосов
/ 06 декабря 2010
document.referrer.indexOf(location.protocol + "//" + location.host) === 0;
1 голос
/ 06 декабря 2010

Первоначально опубликовано на JavaScript - я рекомендатель?

Когда кто-то заходит на наш сайт в первый раз, мы сохраняем ссылку в файле cookie. Таким образом, если они загрузят нашу демо-версию, мы сможем получить исходный реферер из куки-файла и узнаем, какие сайты эффективны в управлении, что ведет к нам.

Конечно, каждая последующая страница, которую посетитель посещает на нашем сайте, будет показывать реферрера как наш сайт. Мы не хотим этого. Что мы сначала сделали, чтобы избежать этого, так это искали текст «наветренный» в реферере и, если это так, предположим, что он был с нашего сайта. Проблема в том, что мы обнаружили, что многие URL-адреса реферера теперь имеют наветренную сторону, либо в качестве поискового запроса, либо в качестве части URL-адреса, который говорит о Windward. (Это хорошая новость, это значит, что мы теперь хорошо известный продукт.)

Так что это привело меня к нашему последнему подходу. Это должно работать для любого сайта и отклонять рефереров только с того же сайта.

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 голосов
/ 02 июля 2019

Если страницы «того же сайта», по вашему мнению, имеют одинаковое происхождение (тот же протокол , хост и порт .),

URL syntax diagram

отметьте это следующим образом:

function the_referrer_has_the_same_origin() {
    try {
        const referrer = new URL(document.referrer);
        return (referrer.origin === location.origin);
    } catch(invalid_url_error) {
        return false;
    }
}
// Works as intended for `https://www.google.com` and `https://www.google.com:443`.

.

Если вы хотите короткий, а нерассмотрите маловероятные ситуации, попробуйте это:

document.referrer.startsWith(location.origin)
// Fails for `https://www.google.com` and `https://www.google.com:443`.

.

0 голосов
/ 20 декабря 2017
document.referrer.includes(location.host);
0 голосов
/ 14 августа 2013

Представленные решения работают в случае отсутствия субдомена на веб-сайте, в случае, если субдомен существует, поэтому мы должны проверить непосредственно перед самим доменом, есть ли субдомены:

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

это решение добавит. * перед доменом, чтобы обнаружить этот поддомен из того же домена.

...