Как проверить с помощью javascript, является ли соединение локальным хостом? - PullRequest
73 голосов
/ 02 июля 2010

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

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

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

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

Ответы [ 8 ]

160 голосов
/ 02 июля 2010

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

if (location.hostname === "localhost" || location.hostname === "127.0.0.1")
    alert("It's a local server!");
18 голосов
/ 06 февраля 2017

при запуске статического 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!");
3 голосов
/ 08 сентября 2017

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

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

if (LOCAL_DOMAINS.includes(window.location.hostname))
  alert("It's a local server!");
2 голосов
/ 13 декабря 2016

Простой способ сделать это - просто проверить имя хоста по отношению к 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!");
}
1 голос
/ 27 сентября 2018

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

if ( ["localhost", "127.0.0.1", ""].includes(window.location.hostname) ) {
     console.log("It's local host !");
}
1 голос
/ 02 июля 2010

Вы можете обнаружить в одном из ваших кодов за страницами с помощью 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
}

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

0 голосов
/ 16 декабря 2018

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

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

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

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

0 голосов
/ 25 августа 2016

Приведенные выше ответы в основном решают проблему, но ...

  • Что если localhost не обязательно 'localhost /'?
  • Что если вы хотите выполнить проверку FE во времяразработка?
  • Что если вам нужно другое поведение во время разработки dev
    ( fe validation, be validation, no validation )

Одним из решений является установкахэш местоположения и проверьте его.

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...