背景
本人闲暇时刻喜欢搜藏一些域名出售,平时免不了做一些域名停放页之类的东西,想让域名得到最大程度的展示,就要在各式各样的环境下部署域名停放页,有免费的也有收费的,当然如果支持php或者类似动态语言的脚本的话,取主域名就简单的多了,有些免费的页面只支持html/js代码.为了通过url或者主机头来获取当前主域名,适应各式各样的环境,决定用js来实现!
目的
封装一个js方法,实现下面的目的,如:
传入 “abc.erji.domain.com.cn” 正确获取到 “domain.com.cn”
传入 “abc.erji.domain.com” 正确获取到 “domain.com”
传入 “erji.domain.com.cn” 正确获取到 “domain.com.cn”
传入 “domain.com.cn” 正确获取到 “domain.com.cn”
传入 “www.domain.com” 正确获取到 “domain.com”
传入 “domain.com” 正确获取到 “domain.com”
先来看看这个方法
function getMainHost(domains) {
let key = `mh_${
Math.random()}`;
let keyR = new RegExp(`(^|;)\\s*${
key}=12345`);
let expiredTime = new Date(0);
let domain = domains ? domains : location.hostname;//如果有传入域名,则使用传入的域名,如果没有传入,则获取当前URL的主机名
let domainList = domain.split('.');
let urlItems = [];
// 主域名一定会有两部分组成
urlItems.unshift(domainList.pop());
// 慢慢从后往前测试
if(domains) {
urlItems.unshift(domainList.pop());
let mainHost = urlItems.join('.');
return mainHost;
} else {
while(domainList.length) {
urlItems.unshift(domainList.pop());
let mainHost = urlItems.join('.');
let cookie = `${
key}=${
12345};domain=.${
mainHost}`;
document.cookie = cookie;
//如果cookie存在,则说明域名合法
if(keyR.test(document.cookie)) {
document.cookie = `${
cookie};expires=${
expiredTime}`;
return mainHost;
}
}
}
}
经过测试如果传入类似www.domain.com.cn这种的二级域名得到的却是com.cn,显然不是我们想要的结果.
优化一下: