如何在 JavaScript 中提取 URL 的主机名部分

IT技术 javascript hostname
2021-01-26 09:00:08

是否有一种非常简单的方法可以从完整的 URL 开始:

document.location.href = "http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah"

并仅提取主机部分:

aaa.bbb.ccc.com

必须有一个 JavaScript 函数可以可靠地执行此操作,但我找不到它。

6个回答

假设您有一个具有以下地址的页面:http://sub.domain.com/virtualPath/page.htm在页面代码中使用以下内容来实现这些结果:

  • window.location.host: 你会得到sub.domain.com:8080sub.domain.com:80
  • window.location.hostname : 你会得到 sub.domain.com
  • window.location.protocol : 你会得到 http:
  • window.location.port: 你会得到808080
  • window.location.pathname : 你会得到 /virtualPath
  • window.location.origin: 你会得到http://sub.domain.com****

更新:关于 .origin

***** 正如ref所述,浏览器兼容性window.location.origin尚不清楚。我已经在 chrome 中检查过它,http://sub.domain.com:port如果端口不是 80,并且http://sub.domain.com端口是 80 ,它就会返回

特别感谢@torazaburo 向我提及这一点。

@Kiquenet 使用像 WebStorm 这样的 javascript IDE,您可以在编写代码时看到可能的选项。
2021-03-13 09:00:08
我在 IIS 中有一个网站和 2 个应用程序。例如:sub.domain.com/v1sub.domain.com/v2以及诸如sub.domain.com/v1/Default.aspxsub.domain.com/v2/Products/Default.aspx页面。我如何可以获得值/v2,我的应用程序sub.domain.com/v2的根
2021-03-25 09:00:08
window.location.origin在 IE9 中未定义(根据链接,它是 IE11+)。这个答案有帮助。
2021-03-25 09:00:08
window.location.pathname/virtualPath它会给/virtualPath/page.htm
2021-03-26 09:00:08
显然对几乎所有人都有帮助,只是它没有回答如何从 URL 中提取主机部分的问题。有趣的是,getRootUrl 函数的正确答案只有 17 票对 609 票。
2021-03-27 09:00:08

您可以连接位置协议和主机:

var root = location.protocol + '//' + location.host;

对于一个 url,比方说'http://stackoverflow.com/questions',它会返回'http://stackoverflow.com'

似乎您应该使用“主机名”而不是“主机”来实现上述结果。来源:stackoverflow.com/questions/6725890/...
2021-03-26 09:00:08
您可以使用 location.origin 获得相同的结果。
2021-04-03 09:00:08
最初的问题没有询问 URL 的协议部分。
2021-04-07 09:00:08

接受的答案对我不起作用,因为希望能够使用任何任意 url,而不仅仅是当前页面的 URL。

看一下URL对象

var url = new URL("http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah");
url.protocol;  // "http:"
url.hostname;  // "aaa.bbb.ccc.com"
url.pathname;  // "/asdf/asdf/sadf.aspx"
url.search;    // "?blah"
谢谢你。几个小时以来,我一直在寻找方法来提取我从 api 获取的 url。太简单了。我只在带有新 URL 的 url 中阅读了它。谢谢你。
2021-03-19 09:00:08
这里的两个答案之一不假设您在浏览器方面......
2021-03-23 09:00:08
它在 Microsoft Internet Explorer 11 中不起作用。无论如何,谢谢。
2021-04-05 09:00:08
+99999999999999
2021-04-11 09:00:08

使用document.location对象及其hosthostname属性。

alert(document.location.hostname); // alerts "stackoverflow.com"

有两种方法。第一个是这里另一个答案的变体,但这个占非默认端口:

function getRootUrl() {
  var defaultPorts = {"http:":80,"https:":443};

  return window.location.protocol + "//" + window.location.hostname
   + (((window.location.port)
    && (window.location.port != defaultPorts[window.location.protocol]))
    ? (":"+window.location.port) : "");
}

但我更喜欢这种更简单的方法(适用于任何 URI 字符串):

function getRootUrl(url) {
  return url.toString().replace(/^(.*\/\/[^\/?#]*).*$/,"$1");
}
谢谢!我也更喜欢第二种方法!尤其是在服务器端 javascript 上时,无法获取 window.location :)
2021-03-20 09:00:08
这里的两个答案之一不假设您在浏览器方面......但是使用新的 URL 检查来自 Martin Konecny 的最新答案。
2021-04-07 09:00:08