在JavaScript中确定域名?

时间:2011-01-05 23:44:50

标签: javascript dns

使用

之间有什么区别
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)

我只想尝试匹配某个域名,并希望使用最佳方法。

5 个答案:

答案 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”

  • `http:// prefixdomain.com`
  • `http:// domain.com.jo`
  • 子域`http:// sub。 domain.com`
  • 路径:`http:// whatever.com / 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: