首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Javascript找出主机的顶级域名

用Javascript找出主机的顶级域名
EN

Stack Overflow用户
提问于 2010-06-17 21:37:54
回答 3查看 1K关注 0票数 3

有没有办法弄清楚当前页面的主机名的顶级域名是什么?我遇到的问题是脚本可能在.com域中,也可能在像.co.uk这样的国际域中

所以: jobs.telegraph.co.uk - top domain is:telegraph.co.uk jobs.nytimes.com - top domain is nytimes.com

问题是location.hostname和document.domain提供了整个域。

一种方法是拥有所有TLD的列表(太多了,不能随身携带),并基于此进行解析。另一条路线是如果最后两个字符在最后一个".“之后,那么国际化-因此最后两个是TLD,但这并不适用于所有国际域名。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-17 22:12:55

我不确定这是不是可以完全做到。在很多情况下,它可能也没有意义。在你的例子中,jobs.telegraph.co.uk显然是电报的一部分,它位于telegraph.co.uk,但在其他情况下,你的子域与第二级主机名没有关系,这是常见的免费虚拟主机提供商。

甚至还有像CentralNIC这样的“伪NIC”,它们通过在uk.com等域下注册子域来扰乱系统,在这种情况下,显然没有任何关系。有关示例avon.uk.com,请参阅。

即使你忽略了这些,整个TLD的结构也是一团糟-- .uk就是一个例子。在第二级有有效的主机名,如nhs.uk和mod.uk,大多数域名在第三级注册,如bbc.co.uk,但.sch.uk域只能在第四级注册(即,在地址http://learning.oriel.w-sussex.sch.uk/中,您将查找oriel.w-sussi.sch.uk和w-sussi.sch.uk不能是有效的主机名)

我不确定这是否可以在javascript中完成,但一种可能是在每个级别(即jobs.telegraph.co.uk、telegraph.co.uk、.co.uk)执行whois查找,直到您得到一条类似于“此级别的注册不可用”的错误消息,然后接受下面的级别作为主机名。不幸的是,我认为这些消息根据注册商的不同而不同,但至少注册商的数量少于可能的主机名排列。

票数 1
EN

Stack Overflow用户

发布于 2012-07-04 06:09:17

Top域是您可以在其中设置cookies的第一个域。默认情况下,浏览器将阻止所有TLD的cookie。如果前面的一句话是正确的,你可以利用它来获取当前页面的顶级域名。

代码语言:javascript
复制
function get_top_domain(){
  var i,h,
    weird_cookie='_weird_get_top_level_domain=cookie',
    hostname = document.location.hostname.split('.');
  for(i=hostname.length-1; i>=0; i--) {
    h = hostname.slice(i).join('.');
    document.cookie = weird_cookie + ';domain=' + h + ';';
    if(document.cookie.indexOf(weird_cookie)>-1){
      document.cookie = weird_cookie.split('=')[0] + '=;domain=' + h + ';expires=Thu, 01 Jan 1970 00:00:01 GMT;';
      return h;
    }
  }
}
票数 3
EN

Stack Overflow用户

发布于 2010-06-17 22:10:00

这对你有帮助吗?

代码语言:javascript
复制
<script>
var doms = ["telegraph.co.uk","jobs.nytimes.com"];
function getTLD(str) {
  var parts = str.split('.');
  var slice = (parts[parts.length-2].length==2)?parts.length-3: parts.length-2;
  return parts.slice(slice).join('.')
}
for (var i=0;i<doms.length;i++) {
  alert(getTLD(doms[i]));
}

</script>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3062086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档