Трюк основывается на том, что браузер может сохранять cookie на доменах любого уровня, кроме верхнего (tld — top level domain).
Например, для sub.example.org
.
Перебираем части домена с конца до тех пор, пока не получится записать и считать cookie.
Сначала пытаемся записать cookie на .org
— не получается.
Следом пытаемся записать на .example.org
— получается, значит example.org
это искомый домен, а все что слева — это поддомен.
Реализация функции.
function get_host_info() {
var hostname = document.location.hostname.split('.');
var cookie = 'tldfind=' + new Date().getTime();
var domain = [];
var segment;
while (segment = hostname.pop()) {
domain.unshift(segment);
document.cookie = cookie + ';domain=.' + domain.join('.') + ';';
if (document.cookie.indexOf(cookie) > -1) {
document.cookie = cookie + ';domain=.' + domain.join('.') + ';expires=Thu, 01 Jan 1970 00:00:01 GMT;';
break;
}
}
return {
subdomain: hostname.join('.') || null,
domain: domain.join('.') || null,
tld: domain.slice(1).join('.') || null
};
})();
Пример использования.
var info = get_host_info();
console.log(info.tld); // org
console.log(info.domain); // example.org
console.log(info.subdomain); // sub