Я хочу проверить в своем javascript, загружается ли страница на моем локальном компьютере.

Причина, по которой я хочу сделать это, заключается в том, что при разработке я хочу убедиться, что обе мои проверки на стороне сервера (C #) работают правильно. Поэтому мне нравится видеть ошибки как на стороне клиента, так и на стороне сервера.

Поэтому, пока я тестирую, в моем jquery validate есть флаг, который всегда пропускает недействительные данные. Таким образом, я вижу ошибки клиента и сервера за один раз.

Однако сейчас я должен вручную переходить и переходить от разработки к производству.

122
chobo2 2 Июл 2010 в 03:50

10 ответов

Лучший ответ

Переменная location.hostname дает вам текущий хост. Этого должно быть достаточно, чтобы определить, в какой среде вы находитесь.

if (location.hostname === "localhost" || location.hostname === "127.0.0.1")
    alert("It's a local server!");
188
ZitRo 25 Авг 2016 в 19:04

Регулярное выражение медленнее *, но короткое и аккуратное. Кроме того, здесь никто не проверяет локальный хост IPv6 (:: 1)

/localhost|127\.0\.0\.1|::1|\.local|^$/i.test(location.hostname)

Он проверяет общий localhost, домен .local и файл: (пустое имя хоста).

*) В Chrome производительность [].includes(...) является лучшей (42 мс), затем следует простой цикл (для, в то время как) с проверкой элементов массива (119 мс), затем [].indexOf(...) > -1 (289 мс) и, наконец, регулярное выражение (566 мс). Но эти измерения как-то относительны, потому что разные браузеры оптимизируются по-разному. В FF 52 ESR includes и indexOf дают схожие результаты, регулярное выражение в 2 раза медленнее и цикл в 6 раз медленнее.

0
mikiqex 16 Дек 2018 в 08:32

Самый простой способ сделать это - просто проверить имя хоста по отношению к localhost или проверить собственное имя домена по подстроке, в этом случае URL-адреса ".local", такие как 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's a local server!");
}
2
Summit 12 Дек 2016 в 22:07

Если запускать статический 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's a local server!");
26
Alexei 6 Фев 2017 в 13:36

Вот как это проверяется в Реагировать, зарегистрировать работника службы , хороший способ проверить, находитесь ли вы на локальном хосте, проверив имя хоста, включая 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}$/
    )
);
2
Alireza 16 Сен 2019 в 01:50

Все еще не подвох, но это может быть небольшим улучшением. Теперь вы можете создать массив доменов и использовать . включает в себя

const LOCAL_DOMAINS = ["localhost", "127.0.0.1", ...];

if (LOCAL_DOMAINS.includes(window.location.hostname))
  alert("It's a local server!");
6
daniele bertella 8 Сен 2017 в 12:25

Вы можете обнаружить в одном из ваших кодов за страницами с помощью c #, например:

if ((Request.Url.Host.ToLower() == "localhost"))
{
    // ..., maybe set an asp:Literal value that's in the js
}

Или, если вы хотите сделать это из клиентского скрипта, вы можете проверить значение window.location.host.

if (window.location.host == "localhost")
{
    // Do whatever
}

Надеюсь это поможет.

1
Samuel Meacham 1 Июл 2010 в 23:55
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;
}
0
antelove 3 Окт 2019 в 05:00

Основываясь на приведенных выше комментариях, следующее регулярное выражение помогло мне проверить, является ли 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)
0
saddy 17 Сен 2019 в 21:50

Кратчайшая форма с использованием той же механики, что и другие скрипты:

if ( ["localhost", "127.0.0.1", ""].includes(window.location.hostname) ) {
     console.log("It's local host !");
}
2
TarmoPikaro 27 Сен 2018 в 07:09