Как определить, является ли document.referrer с моего собственного сайта?

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

Ответы

Ответ 1

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

Ответ 2

Первоначально опубликовано в JavaScript - Я - реферер?

Когда кто-то приходит на наш сайт в первый раз, мы храним реферер в cookie. Таким образом, если они загружают нашу демоверсию, мы можем получить исходный реферер из файла 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;
}

Ответ 3

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

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

это решение добавит. * до того, как домен обнаружит, что поддомен является одним и тем же доменом.

Ответ 4

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

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'.

,

Ответ 5

document.referrer.includes(location.host);