使用
之间有什么区别if (document.domain.toLowerCase().indexOf("domainName") != -1)
和
if(window.location.href.match(/:\/\/(.[^/]+)/)[1].toLowerCase().indexOf("domainName") != -1)
和
if(window.location.hostname.toLowerCase().indexOf("domainName") != -1)
我只想尝试匹配某个域名,并希望使用最佳方法。
答案 0 :(得分:40)
最好,最具可读性的是:
if(location.hostname == "mysite.com"){
}
<强>更新强>
或者帕特里克指出,如果您只是在寻找部分域名,我会使用match
。
if(location.hostname.match('mysite')){} // will return null if no match is found
答案 1 :(得分:3)
所有的解决方案效率都不高!它们基本上匹配包含域名的所有内容。例如我们可以说域名是“domain.com”
所以最好的解决方案是
function isEquals(myhost){
var hostName = window.location.hostname.split('.');
myhost = myhost.split(".");
//handle stuff like site:.com or ..com
for (var x in myhost)
if (myhost[x] == "") myhost.splice(x,1);
//j is where to start comparing in the hostname of the url in question
var j = hostName.length - myhost.length;
for(var i in myhost)
{
//if j is undefined or doesn't equal the hostname to match return false
if (!hostName[j] || hostName[j].toLowerCase() != host[i].toLowerCase())
return false;
j++;
}
return true;
}
答案 2 :(得分:2)
第一个和第三个应该简单快捷。在这两者中,只要您只是测试域名,我认为这不重要。
如果您正在测试子域,请考虑在javascript中修改document.domain
,而window.location.hostname
则不能。{/ p>
答案 3 :(得分:1)
嗯,window.location
是更标准的方式,所以我建议超过document.domain
。 IndexOf将匹配子串,这可能不是你想要的。为什么不呢:
window.location.hostname == "stackoverflow.com"?
我想对于某些网站,您可能有一个可选的子域名。就像www.domain.com和domain.com一样,都去了同一个地方。如果这是一个问题,你可以做一些丑陋的正则表达式,或者你可以只是分裂点:
var domainParts = window.location.hostname.split(".");
domainParts[domainParts.length - 2] == "stackoverflow"
我认为案件不重要,至少在我尝试的浏览器(Firefox和Chrome)中,他们会自动将域名规范化为小写。
答案 4 :(得分:1)
您还可以使用endsWith()
将hostname
字符串的结尾与域名进行比较:
location.hostname === 'stackexchange.com' || location.hostname.endsWith('.stackexchange.com')
注意:这需要ECMAScript 6(ES6)支持。
对于以下类型的网址,这将返回true: