Как проверить с помощью javascript, если соединение является локальным хостом?
Я хочу проверить мой javascript, если загрузка страницы на моей локальной машине.
Причина, по которой я хочу это сделать, заключается в том, что, когда я развиваюсь, мне нравится проверять правильность работы моей проверки на стороне сервера (С#). Поэтому мне нравится видеть ошибки на стороне клиента и стороне сервера.
Итак, пока я тестирую, у меня есть флаг в моем файле проверки jquery, который всегда позволяет пропускать недействительные данные. Таким образом, я вижу ошибки на стороне клиента и сервера за один раз.
Однако сейчас мне приходится вручную переключаться взад и вперед при переходе от разработки к производству.
Ответы
Ответ 1
Переменная location.hostname
предоставляет текущий хост. Этого должно быть достаточно, чтобы определить, в какой среде вы находитесь.
if (location.hostname === "localhost" || location.hostname === "127.0.0.1")
alert("It a local server!");
Ответ 2
если запуск статического html в браузере, например, из местоположения, такого как file:///C:/Documents and Settings/Administrator/Desktop/
, обнаружение "localhost" не будет работать. location.hostname
возвращает пустую строку. так
if (location.hostname === "localhost" || location.hostname === "127.0.0.1" || location.hostname === "")
alert("It a local server!");
Ответ 3
Все еще не поймать все, но это может быть немного улучшиться.
Теперь вы можете создать массив доменов и использовать .:
const LOCAL_DOMAINS = ["localhost", "127.0.0.1", ...];
if (LOCAL_DOMAINS.includes(window.location.hostname))
alert("It a local server!");
Ответ 4
Простым способом сделать это было бы просто проверить имя хоста на локальном хосте или проверить ваше пользовательское доменное имя на подстроку, в этом случае ".local" urls, например http://testsite.local
var myUrlPattern = '.local';
if (window.location.hostname === "localhost" || location.hostname === "127.0.0.1" || window.location.hostname.indexOf(myUrlPattern) >= 0) {
alert("It a local server!");
}
Ответ 5
Вы можете обнаружить в одном из своих кодов за страницами С#, например:
if ((Request.Url.Host.ToLower() == "localhost"))
{
// ..., maybe set an asp:Literal value that in the js
}
Или, если вы хотите сделать это с клиента script, вы можете проверить значение window.location.host.
if (window.location.host == "localhost")
{
// Do whatever
}
Надеюсь, что это поможет.
Ответ 6
Кратчайшая форма с использованием той же механики, что и другие скрипты:
if ( ["localhost", "127.0.0.1", ""].includes(window.location.hostname) ) {
console.log("It local host !");
}
Ответ 7
Вышеупомянутые ответы в основном решают проблему, но...
- Что делать, если localhost не обязательно является "localhost/"?
- Что делать, если вы хотите выполнить проверку FE во время разработки?
- Что делать, если вы хотите разное поведение во время dev
(проверка, проверка, проверка)
Одно из решений - установить хэш местоположения и проверить его.
http://myname.foo.com/form.html#devValidation
Вы можете добавить неограниченные опции с помощью переключателя
switch(location.hash) {}
case '#devValidation':
// log the results and post the form
break;
case '#beValidation':
// skip front end validation entirely
break;
case '#noValidation':
// skip all validation $('[name=validationType']).val('novalidation');
break;
case '#feValidation':
default:
// do fe validation
break;
}
Ответ 8
Регулярное выражение медленнее *, но короткое и аккуратное. Кроме того, здесь никто не проверяет локальный хост IPv6 (:: 1)
/localhost|127\.0\.0\.1|::1|\.local|^$/i.test(location.hostname)
Он проверяет общий локальный хост, домен .local и файл: (пустое имя хоста).
*) В Chrome производительность [].includes(...)
наилучшая (42 мс), затем следует простой цикл (для, в то время как) с проверкой элементов массива (119 мс), затем [].indexOf(...) > -1
(289 мс) и, наконец, регулярное выражение (566). Миз).
Но эти измерения как-то относительны, потому что разные браузеры оптимизируются по-разному. В FF 52 ESR includes
и indexOf
дают схожие результаты, регулярное выражение в 2 раза медленнее и цикл в 6 раз медленнее.
Ответ 9
Вот как это проверяется в React, зарегистрируйте работника службы, хороший способ проверить, находитесь ли вы на localhost, проверив имя хоста, включая localhost и IPv6, и сопоставив начать с 127:
const isLocalhost = Boolean(
window.location.hostname === 'localhost' ||
// [::1] is the IPv6 localhost address.
window.location.hostname === '[::1]' ||
// 127.0.0.1/8 is considered localhost for IPv4.
window.location.hostname.match(
/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
)
);
Ответ 10
На основе приведенных выше комментариев, следующее регулярное выражение помогло мне проверить
если URL-адрес "localhost", любой IP-адрес IPv4 или IPv6.
window.location.hostname.match(/localhost|[0-9]{2,3}\.[0-9]{2,3}\.[0-9]{2,3}\.[0-9]{2,3}|::1|\.local|^$/gi)
Ответ 11
const LOCAL_DOMAINS = [ "localhost", "127.0.0.1" ];
/* offline || development */
if ( LOCAL_DOMAINS.includes(location.hostname) )
{
BASE_URL_PUBLIC = location.hostname + "/folder/website/"; // your project folder
}
/* online || production */
else
{
BASE_URL_PUBLIC = location.hostname;
}