Ответ 1
document.referrer.indexOf(location.protocol + "//" + location.host) === 0;
Каждый раз, когда запрашивается страница, я получаю ссылку на страницу, из которой она появилась. Мне нужно отслеживать только реферер с других сайтов, я не хочу отслеживать переход с одной страницы на другую на моем сайте. Как я могу это сделать?
document.referrer.indexOf(location.protocol + "//" + location.host) === 0;
Первоначально опубликовано в 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;
}
Представленные решения работают в случае отсутствия субдомена на веб-сайте в случае поддомена, тогда мы должны проверить непосредственно перед самим доменом, если представлены какие-либо поддомены:
document.referrer.replace("http://", '').replace("https://", '').split('/')[0].match(new RegExp(".*" +location.host.replace("www.", '')))
это решение добавит. * до того, как домен обнаружит, что поддомен является одним и тем же доменом.
Если страницы "одного и того же веб-сайта", по вашему мнению, имеют одинаковое происхождение (один и тот же протокол, хост и порт),
проверьте это так:
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'.
,
document.referrer.includes(location.host);