Location.host vs location.hostname и совместимость с несколькими браузерами?

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

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

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

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

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

Для чего нужно использовать имя хоста или хоста?

В Firefox 5 и Chrome 12:

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

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

Это потому, что порт фактически не находится в адресной строке?

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

Должно ли location.host/hostname быть проверено или мы можем быть уверены в IE6 + и всех остальных, которые будут существовать?

Ответ 1

interactive link anatomy

В качестве небольшой заметки: анатомия интерактивной ссылки

-

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

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

Ответ 2

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

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

Ответ 3

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

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

Решение

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

Ответ 4

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

Что вы действительно хотите, так это:

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

Ответ 5

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

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

Ответ 6

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