我如何使用JavaScript从可能的子域名集合
sub1.example.com
sub2.example.com
sub3.example.com
中获取域名example.com
?sub1.example.com
sub2.example.com
sub3.example.com
中获取域名example.com
?var parts = location.hostname.split('.');
var subdomain = parts.shift();
var upperleveldomain = parts.join('.');
为了仅获取二级域名,您可以使用
var parts = location.hostname.split('.');
var sndleveldomain = parts.slice(-2).join('.');
hostname
是一个IP地址时?是的,但是我想不出在这种情况下会有什么有意义的结果...应该返回未修改的吗? - Bergiif (arrHostname.length == 4 && /^\d+$/.test(hostname.replace(/\./g, ''))) // 是IP地址;返回未经修改的主机名
- johntrepreneurwww.amazon.co.uk
为例。
如果只尝试获取二级域名,你最终将得到co.uk
,这可能不是你想要的。那是因为co.uk
是一个“公共后缀”,这意味着它本质上是一个顶级域名。以下是来自https://publicsuffix.org的公共后缀定义:psl
这样的域解析工具(https://github.com/lupomontero/psl)。它适用于nodejs和浏览器,并在Mozilla维护的公共后缀列表上进行了测试。var psl = require('psl');
// TLD with some 2-level rules.
psl.get('uk.com'); // null);
psl.get('example.uk.com'); // 'example.uk.com');
psl.get('b.example.uk.com'); // 'example.uk.com');
这更快
const firstDotIndex = subDomain.indexOf('.');
const domain = subDomain.substring(firstDotIndex + 1);
一些更加强大的版本,独立于子域名数量
function getDomain() {
const hostname = window.location.hostname.split('.');
hostname.reverse();
return `${hostname[1]}.${hostname[0]}`;
}
如果你想验证特定子域是否存在
var parts = location.hostname.split('.');
if(parts.includes('subdomain_to_search_here')){
//yes
}else{
//no
}
function getDomain() {
const hostnameArray = window.location.hostname.split('.')
const numberOfSubdomains = hostnameArray.length - 2
return hostnameArray.length === 2 ? window.location.hostname : hostnameArray.slice(numberOfSubdomains).join('.')
}
console.log(getDomain());
这将删除所有子域,因此"a.b.c.d.test.com"将变为"test.com"
通用解决方案在这里进行了解释 http://rossscrivener.co.uk/blog/javascript-get-domain-exclude-subdomain 来自以上链接
var domain = (function(){
var i=0,domain=document.domain,p=domain.split('.'),s='_gd'+(new Date()).getTime();
while(i<(p.length-1) && document.cookie.indexOf(s+'='+s)==-1){
domain = p.slice(-1-(++i)).join('.');
document.cookie = s+"="+s+";domain="+domain+";";
}
document.cookie = s+"=;expires=Thu, 01 Jan 1970 00:00:01 GMT;domain="+domain+";";
return domain;
})();
sub1.example.co.uk
是什么情况?http://publicsuffix.org/ - SLaksmeta.cooking.stackexchange.com/
和http://cooking.stackexchange.com/
有什么用途? - David Thomas