如何使用window.location获取子域名?

33

如果我的主机名是http://sample.example.com,那么在Javascript中使用 window.location.hostname,你会得到 "example.com" 还是 "sample.example.com"?

如果不行,要如何才能获取 "sample.example.com" 呢?

13个回答

30

是的,window.location.hostname 可以给你子域名。如果这不起作用或其他浏览器不支持,你可以很容易地对其进行解析:

// window.location.href == "http://sample.somedomain.com/somedir/somepage.html"
var domain = /:\/\/([^\/]+)/.exec(window.location.href)[1];

nickf,谢谢!/://([^/]+)/是什么?要执行的正则表达式是什么? - LB.
1
是的:它会从第一个“://”到结尾或下一个“/”找到所有内容...这将是子域、域和顶级域名的内容。 - nickf

24

这个对我来说就可以了:

var host = window.location.host
var subdomain = host.split('.')[0]

5
如果主机名以 www 开头,这可能会返回 www 作为子域名。 - King Holly
4
这是正确的,毕竟www是一个子域名。 - Lucas Vazquez

15

我知道这是一个老问题,但更加稳健的答案是捕获所有子域名。可能存在嵌套的子域名,例如https://my.company.website.com。为了充分捕获所有子域名,我认为这是最简单的答案:

// for https://my.company.website.com,
const subdomain = window.location.hostname.split('.').slice(0, -2).join('.');
console.log(subdomain); // "my.company"

1
我喜欢这个答案,因为你不需要担心是否有子域名。它适用于:subdomain2.subdomain1.domain.comsubdomain.domain.comdomain.com。由于本地主机的原因,如果我在本地环境中,我会将切片更改为-1。 - Lucas Vazquez
为了澄清@LucasVazquez的评论,在domain.com的例子中,这段代码将返回一个空字符串 - user736893
2
不支持顶级域名,如.co.uk - borisdiakur

12

以下是实现方法:

var subdomain =  window.location.host.split('.')[1] ? window.location.host.split('.')[0] : false;

2
请考虑解释您的答案。 - Avag Sargsyan
它是这样的 x = a ? b : c 的意思是:如果'a'存在,则'x'将等于'b',否则'x'将等于'c'。因此,如果您调用sub.mydoman.com(在分割中的第二个值存在,因此它意味着您有子域,即'sub'),但是您调用mydoman.com,则位置主机的第二部分将不存在,因此它将为null。所以你将有subdoman ='false',通过这种方式,您可以获取子域或false。 - Ilhami Mounir Aziz Girgis

6
const subdomain = window.location.hostname.split(".")[0]

window.location.hostname 返回包括子域名、主域名和顶级域名的字符串。
因此,您可以通过将其转换为数组,然后获取第一个元素来轻松获取第一个单词。


5

首先,正确的写法是window.location,而不是document.location(在某些浏览器中document.location也可以使用,但它不是标准写法)

而且,location.hostname会返回包括任何子域名在内的完整域名

更多信息请参阅Window Location


3

是的,alert(window.location.hostname)将包括子域名,如'www'和'sample'。


2
这段代码可能会有帮助:
var a = new String(window.location);
a = a.replace('http://','');
a = a.substring(0, a.indexOf('/'));
alert(a);

1

这是一种简单的方法来拆分域名部分,比如子域.主域.扩展名

// Print Subdomain
console.log(window.location.host.split('.')[0]);

// Print  Maindomain
console.log(window.location.host.split('.')[1]);

// Print  extension 
console.log(window.location.host.split('.')[2]);

1

我建议使用npm包psl(公共后缀列表)。您可以查看此链接:npm psl


这是解决它的正确方法。子域可以有一个点或多个点。 - feyzullahyildiz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接