【问题标题】:javascript - get domain ONLY from document.referrerjavascript - 仅从 document.referrer 获取域
【发布时间】:2012-04-25 13:44:44
【问题描述】:

我只想从引荐来源网址获取域。我最常得到的推荐人网址是http://www.davidj.com/pages/flyer.asp & http://www.ronniej.com/linkdes.com/?adv=267&loc=897

每当我得到像上面这样的引荐来源网址时,我只想得到域示例:http://www.davidj.com

我曾尝试使用 .split 方法,但我无法使用它。

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:
    var url = "http://www.ronniej.com/linkdes.com/?adv=267&loc=897"
    var referrer =  url.match(/:\/\/(.[^/]+)/)[1];
    

    http://jsfiddle.net/hyjcD/

    if (document.referrer) {
       url = document.referrer; 
       ref = url.match(/:\/\/(.[^/]+)/)[1];
    }
    

    【讨论】:

    • @Reminson 感谢这个..它可以工作,但我有一个问题..我已经使用 .js 文件将代码放在我的域上,基本上它正在加载到所有页面上。唯一的问题是这个。每当我直接访问页面(没有引荐来源网址)时,我都会收到以下错误消息: url.match(/:\/\/(.[^/]+)/)[1]; 为空
    • 我正在使用这个:var url = unescape(document.referrer); var ref = url.match(/:\/\/(.[^/]+)/)[1];
    • 那是因为document.referrerundefined 并且没有匹配的url,你应该检查`if (document.referrer)' is not "undefined" 然后执行这段代码。
    • 只是这个解决方案:stackoverflow.com/a/52850936/1407491
    【解决方案2】:

    您可以在内部使用将 url 写入锚元素并从中获取较小的部分

    var anchor = document.createElement("a");
    anchor.href = "http://www.davidj.com/pages/flyer.asp";
    
    console.log(anchor.protocol + "//" + anchor.host); // "http://www.davidj.com"
    

    这要容易得多,因为您不必关心拆分或类似的事情...这很合乎逻辑...本机锚具有相同的属性,例如 window.location 至少在 URL 方面

    编辑:IE 6-9 将默认端口添加到 anchor.host // "http://www.davidj.com:80

    【讨论】:

    • IE 似乎确实将端口添加到anchor.host,但没有添加到location.host。如果您不需要端口,您可以改用anchor.hostnamelocation.hostname
    【解决方案3】:

    尝试使用 JS 原生 URL 接口处理 URL 字符串:

    let domain = (new URL(document.referrer)).hostname;
    

    参考:https://developer.mozilla.org/en-US/docs/Web/API/URL

    【讨论】:

    • 使用 .host 包含端口
    【解决方案4】:

    链拆分、切片和连接:

    document.referrer.split("/").slice(0,3).join("/")
    

    【讨论】:

      【解决方案5】:

      你可以使用正则表达式:

      var matchHost = /^https?:\/\/.*\//;
      
      var match = matchHost.exec('http://www.davidj.com/pages/flyer.asp');
      if(match) {
          var host = match[0];
          console.log(host);
      }
      

      【讨论】:

        【解决方案6】:
        if (document.referrer.split('/')[2] == "domain") {
            //................
        }                              
        

        【讨论】:

          【解决方案7】:

          从引用字符串获取协议+域的唯一答案是:

          document.referrer.split("/").slice(0,3).join("/").split("?").slice(0,1).join("?")

          如果存在查询字符串,则需要进行第二次拆分:http://www.example.com?s=search

          它适用于:

          1. http://....
          2. https://....
          3. http://www.example.com
          4. http://www.example.com/
          5. http://www.example.com/aaa/bbb/ccc....
          6. http://www.example.com?s=search&t=time
          7. http://www.example.com/?s=search&t=time

          【讨论】:

          • 不适用于file:///home/user/desktop/page.html
          • @user5994461 - 在谈论本地 url 时,我不确定什么是“域”,这样的 url 没有域
          猜你喜欢
          • 2011-05-07
          • 2011-01-10
          • 1970-01-01
          • 2012-01-05
          • 2015-09-06
          • 1970-01-01
          • 1970-01-01
          • 2012-11-02
          相关资源
          最近更新 更多