Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 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;
}