2010-06-17 55 views
3

有沒有辦法找出當前頁面的主機名稱頂級域名是什麼?我遇到的問題是腳本可能在.com域,或者在像.co.uk這樣的國際域中。用Javascript搞清楚主機的頂級域名

所以: jobs.telegraph.co.uk - 頂級域名是:telegraph.co.uk jobs.nytimes.com - 頂級域名是nytimes.com

問題是,location.hostname,和document.domain給整個域。

一條路線是有一個所有頂級域名(可攜帶太多)的清單並基於此進行解析。另一條路線是如果在最後一個「。」之後有兩個字符,而不是國際化 - 因此最後兩個是頂級域名,但這不適用於所有國際域名。

回答

1

我不確定這是完全可以做到的。它在很多情況下也許沒有意義。在你的例子中,jobs.telegraph.co.uk顯然是Telegraph的一部分,它位於telegraph.co.uk,但在其他情況下,你有一些與二級主機名無關的子域,免費虛擬主機提供商。

甚至有一些「僞NIC」,如CentralNIC,通過在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中完成,但有一種可能性是在每個級別進行whois查找(例如jobs.telegraph.co.uk,telegraph.co.uk,.co.uk),直到您收到錯誤消息,這些錯誤消息沿着「此級別不可用的註冊「,然後接受下面的級別作爲主機名。不幸的是,我認爲這些消息因註冊服務商而異,但至少註冊服務商的數量少於可能的主機名排列。

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

這失敗上(例如) 「www.arnewoodpractice.nhs.uk」, 「learning.oriel.w-sussex.sch.uk」 和 「g.unicauca.edu.co」 – 2010-06-17 14:20:14

+0

呀和我剛發現www dot uk dot com也是! – mplungjan 2010-06-17 14:28:05

+0

Erm nhs.uk是arnewoodpractice.nhs.uk的頂級域名(TLD)否? – mplungjan 2010-06-17 14:29:16

3

Top域名是第一個可以設置Cookie的域名。默認情況下,瀏覽器將阻止所有頂級域名的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

這太棒了。 – Mordred 2014-04-16 19:54:48