【问题标题】:Current URL without parameters, hash, http(s)://当前 URL 不带参数、哈希、http(s)://
【发布时间】:2012-03-01 09:35:47
【问题描述】:

我正在寻找一种在 Javascript 中获取当前文档 URL 的简洁方法。

  • 网址应该没有参数 (?parameter1=bla&parameter2=bla)
  • URL 应该没有哈希标签 (#jumppoint)
  • http/https 应该被移除/合并到 http

我知道我可以使用 location.href 获取当前 URL,然后使用一些正则表达式来清理它,但也许有更好/更清洁的解决方案来摆脱垃圾?

【问题讨论】:

  • 我很想投反对票只是因为将网址的重要部分称为“垃圾”!
  • @Douglas 重要性是主观的。在这个函数的上下文中,只有主机是相关部分,这是完全合理的。
  • ptorocol 可以是 ftp: 也是,需要考虑吗?

标签: javascript string url


【解决方案1】:

除了window.location 中的href,还有很多其他参数。在此处查看完整参考:https://developer.mozilla.org/en/DOM/window.location

作为初学者,您正在寻找的可能是window.location.hostname

"主机名(不带端口号或正方形 括号)。”

在示例 URL http://[www.example.com]:80/search?q=devmo#test 中,主机名将是 www.example.com

如果您还想包含路径并强制使用 http:// 协议,请尝试:

'http://' + window.location.hostname + window.location.pathname;

附带说明一下,从另一个 URL 而非 window.location 获取相同参数的一个绝妙技巧是创建一个空锚点:

var a = document.createElement('a');
a.href = 'http://www.example.com:80/search?q=devmo#test';

console.log('http://' + a.hostname + a.pathname);

【讨论】:

  • 我认为他们也想要路径名。
  • @jfriend00 是的,文档应该足以解决问题,但为了清楚起见,我也添加了这一点。
  • 'http://' + window.location.hostname + window.location.pathname; 你忘记了端口
【解决方案2】:

给出的答案都没有解决协议可以是 OP 标题中的 http 或 https 的事实。为了适应这一点,我建议:

document.location.protocol +"//"+ document.location.hostname + document.location.pathname

【讨论】:

【解决方案3】:

Location object 得到了你需要的东西

window.location.hostname + window.location.pathname

【讨论】:

    【解决方案4】:

    你有 document.location 对象,所以:

    var oLoc = document.location,
        sUrl = oLoc.protocol + oLoc.hostname;
        // or "http://" + oLoc.hostname
    

    【讨论】:

      【解决方案5】:

      您可以使用这些替换函数来删除哈希和搜索参数并将 https 规范化为 http:

      url = url.replace(/#[^#]*$/, "").replace(/\?[^\?]*$/, "").replace(/^https:/, "http:");
      

      或者,如果你真正想要的只是域和路径,你可以使用这个:

      window.location.hostname + window.location.pathname
      

      【讨论】:

        【解决方案6】:

        请试试这个sn-p:

        if (!window.location.origin){
          // For IE
          window.location.origin = window.location.protocol + "//" + (window.location.port ? ':' + window.location.port : '');      
        }
        
        url = window.location.origin + window.location.pathname;
        document.write('Origin url: ' + url);

        【讨论】:

        • 这个问题早就回答过了。这个问题的答案是错误的,因为如果页面是 https,它仍然会提供 https:// 作为原始协议 - 但它应该剥离协议/将其读取为 http。
        • for-IE代码中是不是缺少主机名?喜欢window.location.origin = window.location.protocol + "//" + (window.location.port ? ':' + window.location.port : '') + '/' + window.location.hostname;
        • 是的,但不是这个顺序:window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port : '');
        【解决方案7】:

        This 页面表明您可能使用window.location.host 来获取您真正感兴趣的部分。不过,我还没有测试过。

        【讨论】:

          【解决方案8】:

          试试:

          window.location.hostname;

          【讨论】:

            猜你喜欢
            • 2012-05-28
            • 1970-01-01
            • 2021-07-05
            • 1970-01-01
            • 1970-01-01
            • 2018-02-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多