使用Javascript确定主机的顶级域名

时间:2010-06-17 13:37:54

标签: javascript

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

所以: jobs.telegraph.co.uk - 顶级域名是:telegraph.co.uk jobs.nytimes.com - 顶级域名是nytimes.com

问题是location.hostname和document.domain给出了整个域。

一种方法是列出所有TLD(过多携带)并根据该列表进行解析。另一条路线是在最后一个“。”之后的2个字符,而不是国际化 - 因此最后两个是TLD,但这并不适用于所有国际域名。

3 个答案:

答案 0 :(得分:3)

Top域名是您可以设置Cookie的第一个域名。浏览器默认会阻止所有TLD的Cookie。如果上一句为真,您可以利用它来获取当前页面的顶级域名。

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;
    }
  }
}

答案 1 :(得分:1)

我不确定这是完全可行的。在许多情况下它也许没有意义。在你的例子中,jobs.telegraph.co.uk显然是电报的一部分,它住在telegraph.co.uk,但在其他情况下,你有子域名与二级主机名没有任何关系,这是常见的免费网络托管服务提供商。

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

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

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

答案 2 :(得分:0)

这是否适合你呢?

<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>