местоположение.хост против местоположения.имя хоста и кросс-браузерная совместимость?


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

мы хотели бы показать небольшое предупреждение стиля "top bar" на основе js, если они обращаются к домену с помощью какого-то веб-прокси (поскольку он имеет тенденцию нарушать js).

мы думали об использовании следующие:

var r = /.*domain.com$/;
if (r.test(location.hostname)) {
    // showMessage ...
}

Это позаботится о любых поддоменах, которые мы когда-либо использовали.

что мы должны использовать host или имя?

в Firefox 5 и Chrome 12:

console.log(location.host);
console.log(location.hostname);

.. показывает то же самое для обоих.

Это потому что порт на самом деле не в адресной строке?

W3Schools говорит хост содержит порт.

стоит месте.хост / имя хоста должны быть проверены или мы можем быть уверены, что в IE6+ и все остальные будут существовать?

6 290

6 ответов:

interactive link anatomy

как маленькая памятка: the интерактивная Анатомия ссылок

--

короче говоря (предполагая расположение http://example.org:8888/foo/bar#bang):

  • hostname дает example.org
  • host дает example.org:8888

хост просто включает номер порта, если он указан. Если в URL-адресе нет номера порта, то он возвращает то же самое, что и имя хоста. Вы выбираете, хотите ли вы соответствовать номеру порта или нет. См.https://developer.mozilla.org/en/window.location для получения дополнительной информации.

Я бы предположил, что вы хотите имя хоста, чтобы просто получить имя сайта.

Если вы настаиваете на использовании window.location.origin Вы можете поместить это в верхней части кода перед чтением origin

if (!window.location.origin) {
  window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');
}

решение

PS: для записи, это был на самом деле оригинальный вопрос. Вероятно, они уже отредактировали его. :)

основной вопрос был дан ответ выше. Я просто хотел отметить, что регулярное выражение, которое вы используете, имеет ошибку. Он также будет успешным на foo-domain.com, который не является поддоменом domain.com

чего вы действительно хотите это:

/(^|\.)domain\.com$/

MDN:https://developer.mozilla.org/en/DOM/window.location

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

просто чтобы добавить примечание, что браузер Google Chrome имеет атрибут origin для местоположения. что дает вам весь домен от протокола до номера порта, как показано на скриншоте ниже. chrome developers tool