由于需要实现跨域iframe通信,要保证域一致。但是由于api网址可能有差异,所以仅取最小域。
一、子域举例
1.1 通过IP访问
域自动设置为IP,不带端口号。
例如:
http://192.168.1.3=>192.168.1.3
https://192.168.1.3:8098=>192.168.1.3
http://192.168.1.3:8087=>192.168.1.3
1.2 通过域名访问
域自动设置为Request URL的二级域名
例如:
http://www.baidu.com=>baidu.com
https://www.baidu.com=>baidu.com
https://baidu.com=>baidu.com
https://baidu.com:8392=>baidu.com
https://abc.def.baidu.com:8392=>baidu.com
二、获取子域
function getdomain()
{
var domain = window.document.domain;
//判断域是不是localhost
if(domain.toLowerCase()=="localhost")
{
return domain;
}
//判断域是不是ip
var ipRegx=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
if(ipRegx.test(domain))
{
return domain;
}
//肯定是域名了,忽略直接用浏览器打开文件的情况
for(var i=0,last1=0 ,last2=0; i<domain.length; i++)
{
if(i>=domain.length-1)
{
return domain.substring(last1==0?last1:last1+1,domain.length); //若last1=0,表明域名至只有一个.符号,如果非0,则取一级域名即可。
}
if(domain[i]=='.')
{
last1=last2;
last2=i;
}
}
}
三、潜在bug
baidu.com.cn/baidu.org.cn等域名,获取的子域为com.cn/org.cn还未测浏览器能否通过测试