Как проверить с помощью javascript, если соединение является локальным хостом?


Я хочу проверить свой javascript, если загрузка страницы происходит на моей локальной машине.

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

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

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

7 58

7 ответов:

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

if (location.hostname === "localhost" || location.hostname === "127.0.0.1")
    alert("It's a local server!");

при запуске статического 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!");

простой способ сделать это-просто проверить имя хоста против localhost или проверить свое пользовательское доменное имя против подстроки, в этом случае ".локальные " URL-адреса, такие как http://testsite.местные

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!");
}

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

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

if (LOCAL_DOMAINS.includes(window.location.hostname))
  alert("It's a local server!");

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

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

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

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

надеюсь, что это помогает.

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

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

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

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;
}

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

if ( ["localhost", "127.0.0.1", ""].includes(window.location.hostname) ) {
     console.log("It's local host !");
}