每次请求页面时,我会获取该页面来自哪个网站的引荐者。我需要跟踪其他网站的引荐者,而不是跟踪在我的网站内从一个页面到另一个页面的引荐。我该如何做呢?
每次请求页面时,我会获取该页面来自哪个网站的引荐者。我需要跟踪其他网站的引荐者,而不是跟踪在我的网站内从一个页面到另一个页面的引荐。我该如何做呢?
document.referrer.indexOf(location.protocol + "//" + location.host) === 0;
"//"
不需要转义。 - Eli Grey最初发布于JavaScript - 我是引荐者吗?
当有人第一次访问我们的网站时,我们会将引荐者存储在 cookie 中。这样,如果他们下载我们的演示文稿,我们可以从 cookie 中获取原始引荐者,并了解哪些网站对我们的潜在客户产生了推动作用。
当然,访问者在我们网站上点击的每个后续页面都会显示引荐者为我们的网站。我们不想要这些。我们首先采取的方法是查找引荐者中的“windward”文本,如果是,则假定它来自我们的网站。但问题是,我们发现很多引荐者 URL 现在都包含 windward,无论是作为搜索词还是作为谈论 Windward 的 URL 的一部分。(这是好消息,这意味着我们现在是一个知名产品。)
因此,这就带我到了我们最近的方法。这应该适用于任何网站,并且只应拒绝来自同一网站的引荐者。
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;
}
https
吗? - AncientSwordRage用这种方式进行检查:
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.replace("http://", '').replace("https://", '').split('/')[0].match(new RegExp(".*" +location.host.replace("www.", '')))
这个解决方案将在域名前添加.*以检测子域是否来自同一域名。
document.referrer.includes(location.host);
includes()
方法(https://developer.mozilla.org/nl/docs/Web/JavaScript/Reference/Global_Objects/Array/includes) - wk_