如何确定document.referrer是否来自我自己的网站?

问题描述 投票:15回答:4

每次请求页面时,我都会获得它所来自的页面的引荐来源。我需要跟踪来自其他网站的推荐人,我不想跟踪我的网站中从一个页面到另一个页面。我怎样才能做到这一点?

javascript document referrer
4个回答
37
投票
document.referrer.indexOf(location.protocol + "//" + location.host) === 0;

1
投票

最初发布于JavaScript - Am I the Referrer?

当有人第一次访问我们的网站时,我们会将推荐人存储在cookie中。这样,如果他们下载我们的演示版,我们就可以从cookie中获取原始推荐人,并了解哪些网站可以有效地为我们提供引导。

当然,访问者在我们网站上点击的每个后续页面都会将推荐人显示为我们的网站。我们不想要那些。我们首先要做的是避免这种情况,在引用者中寻找文本“迎风”,如果是这样,假设来自我们的网站。这个问题是我们发现很多推荐人网址现在都有迎风,无论是作为搜索术语还是谈论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
投票

如果子域存在,则在网站中没有子域的情况下提供解决方案,那么我们必须在域本身之前检查是否存在任何子域:

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

此解决方案将在域之前添加。*以检测该子域来自同一域。


-1
投票
document.referrer.includes(location.host);
© www.soinside.com 2019 - 2024. All rights reserved.