Ответ 1
В качестве небольшой заметки: анатомия интерактивной ссылки
-
Короче говоря (при условии расположения http://example.org:8888/foo/bar#bang
):
-
hostname
дает вамexample.org
-
host
дает вамexample.org:8888
Какой из них наиболее эффективен против проверки, если пользовательский агент обращается через правильный домен.
Мы хотели бы показать предупреждение стиля маленького 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 + и всех остальных, которые будут существовать?
В качестве небольшой заметки: анатомия интерактивной ссылки
-
Короче говоря (при условии расположения 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 имеет атрибут источника для местоположения. который дает вам весь домен от протокола до номера порта, как показано на скриншоте ниже.