Определить доменное имя в JavaScript? - PullRequest
15 голосов
/ 06 января 2011

В чем разница между использованием

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 ]

41 голосов
/ 06 января 2011

Лучшим и наиболее читаемым будет:

if(location.hostname == "mysite.com"){

}

Обновление:

Или, как указал Патрик, если вы ищете только частьдоменное имя я бы использовал match.

if(location.hostname.match('mysite')){} // will return null if no match is found
3 голосов
/ 06 января 2011

Все ваши решения не эффективны!они в основном будут соответствовать всему, что содержит доменное имя. Например, допустим, домен является «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 голосов
/ 06 января 2011

Первый и третий должны быть простыми и быстрыми.Из этих двух, я не думаю, что это действительно имеет значение , пока вы просто тестируете домен.

Если вы тестируете субдомен, то подумайте, что document.domain быть измененным в javascript, в то время как window.location.hostname не может.

1 голос
/ 30 апреля 2018

Вы также можете использовать endsWith() для сравнения конца строки hostname с именем домена:

location.hostname === 'stackexchange.com' || location.hostname.endsWith('.stackexchange.com')

Примечание: Для этого требуется поддержка ECMAScript 6 (ES6).

Это вернет true для следующих типов URL:

1 голос
/ 06 января 2011

Ну, 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), они нормализуютсяимя домена в нижнем регистре автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...