【问题标题】:Checking the referrer检查推荐人
【发布时间】:2011-01-03 03:12:34
【问题描述】:

我正在使用它来检查是否有人来自 Reddit,但是它不起作用。

var ref = document.referrer;
if(ref.match("/http://(www.)?reddit.com(/)?(.*)?/gi"){
    alert('You came from Reddit');
} else {
    alert('No you didn\'t');
}

也欢迎对正则表达式提出建议。

【问题讨论】:

    标签: javascript referrer


    【解决方案1】:

    试试这个:

    if (ref.match(/^https?:\/\/([^\/]+\.)?reddit\.com(\/|$)/i)) {
      alert("Came from reddit");
    }
    

    正则表达式:

    /^           # ensure start of string
     http        # match 'http'
     s?          # 's' if it exists is okay
     :\/\/       # match '://'
     ([^\/]+\.)? # match any non '/' chars followed by a '.' (if they exist)
     reddit\.com # match 'reddit.com'
     (\/|$)      # match '/' or the end of the string
    /i           # match case-insenitive
    

    【讨论】:

    • +1 用于正则表达式的深入解释。很有帮助。
    【解决方案2】:

    关闭您的if 亲...

    【讨论】:

    • :) 每个人都会犯这样的错误。使用会给你带来错误的东西(比如 Firebug),因为盯着一个默默失败的 JavaScript 页面是一个 PITA。
    【解决方案3】:

    我一直在使用 RegEx 的替代方法,通过在引荐来源网址中查找域

    if (document.referrer.indexOf('reddit.com') >= 0) { alert('They came from Reddit.com'); }
    

    编辑:正如 thekingoftruth 指出的那样,如果 reddit.com 包含在 URL 参数中,那将不起作用,因此我对其进行了一些扩展。正如我在上面的 RegExp 中发现的那样,我还添加了 toLowerCase()。

    if (document.referrer.indexOf('?') > 0){
        if (document.referrer.substring(0,document.referrer.indexOf('?')).toLowerCase().indexOf('reddit.com') >= 0){
        alert('They came from Reddit');
        }
    } else {
        if (document.referrer.toLowerCase().indexOf('reddit.com') > 0){
                alert('They came from Reddit');
        }
    }
    

    【讨论】:

    • 唯一的问题是,如果引用者在其中包含一个子 URL 作为查询参数,例如。
    • 公平点的真理之王。我想我可以检查一下 ?并在那之前看看。我还添加了一个 toLowerCase()。我只是有点难过(如果不惊讶的话)单行解决方案不再是:-)
    • 我听到了。 Javascript 确实很难拥有紧凑的单行代码。 :(
    【解决方案4】:

    试试这个:

    ref.match(new RegExp("^http://(www\\.)?reddit\\.com/", "i"))
    

    或者:

    ref.match(/^http:\/\/(www\.)?reddit\.com\//i)
    

    【讨论】:

      【解决方案5】:

      我会用这个,这不是更简单的方法吗?

        var referral= document.refferer;
         If(referral.includes("www.reddit.com"){
        alert("you came from reddit");
         }
           else{
          alert("you didn't come from reddit");
             {
      

      【讨论】:

        【解决方案6】:

        使用 var ref = document.referer; // 一个 R 而不是两个

        【讨论】:

        • 这完全符合我的要求;标题中的引用者。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-07-15
        • 2011-09-07
        • 1970-01-01
        • 2010-11-27
        • 2014-02-26
        • 2021-05-28
        • 2011-08-21
        相关资源
        最近更新 更多