Chcę sprawdzić w moim javascript, czy ładująca się strona znajduje się na moim komputerze lokalnym.
Powodem, dla którego chcę to zrobić, jest to, że podczas programowania lubię upewnić się, że zarówno walidacja po stronie serwera (C #) działa poprawnie. Dlatego lubię widzieć błędy po stronie klienta i po stronie serwera.
Więc podczas testowania mam flagę w moim jquery validate stuff, który po prostu zawsze przepuszcza nieprawidłowe dane. W ten sposób widzę błędy po stronie klienta i serwera za jednym zamachem.
Jednak teraz muszę ręcznie zmieniać ustawienia, przechodząc od etapu projektowania do produkcji.
javascript
jquery
localhost
chobo2
źródło
źródło
Odpowiedzi:
location.hostname
Zmienna daje bieżącego hosta. To powinno wystarczyć do określenia, w jakim środowisku się znajdujesz.if (location.hostname === "localhost" || location.hostname === "127.0.0.1") alert("It's a local server!");
źródło
jeśli uruchomienie statycznego html w przeglądarce, np. z lokalizacji takiej jak
file:///C:/Documents and Settings/Administrator/Desktop/
wykrywanie "localhost", nie zadziała.location.hostname
zwróci pusty ciąg. więcif (location.hostname === "localhost" || location.hostname === "127.0.0.1" || location.hostname === "") alert("It's a local server!");
źródło
Wciąż nie jest to haczyk, ale może to być niewielka poprawa. Możesz teraz utworzyć tablicę domen i używać .includes
const LOCAL_DOMAINS = ["localhost", "127.0.0.1", ...]; if (LOCAL_DOMAINS.includes(window.location.hostname)) alert("It's a local server!");
źródło
W ten sposób zostaje sprawdzony w React, zarejestruj pracownika usługi , dobry sposób na sprawdzenie, czy jesteś na hoście lokalnym, sprawdzając nazwę hosta, w tym localhost i IPv6 , i dopasowując początek od 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}$/ ) );
źródło
Najkrótsza forma wykorzystująca tę samą mechanikę co inne skrypty:
if ( ["localhost", "127.0.0.1", ""].includes(window.location.hostname) ) { console.log("It's local host !"); }
źródło
Ten obejmuje również niektóre typowe przypadki, w których adresy IP sieci lokalnej zaczynają się od
10.0.
lub192.168.
lub domeny Bonjour, jak domena kończąca się na.local
:export function isLocalNetwork(hostname = window.location.hostname) { return ( (['localhost', '127.0.0.1', '', '::1'].includes(hostname)) || (hostname.startsWith('192.168.')) || (hostname.startsWith('10.0.')) || (hostname.endsWith('.local')) ) }
źródło
Łatwym sposobem na to byłoby po prostu sprawdzenie nazwy hosta z lokalnym hostem lub porównanie nazwy domeny niestandardowej z podciągiem, w tym przypadku „.local” adresami URL, takimi jak 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!"); }
źródło
Możesz wykryć w jednym ze swoich kodów za stronami z C #, na przykład:
if ((Request.Url.Host.ToLower() == "localhost")) { // ..., maybe set an asp:Literal value that's in the js }
Lub jeśli chcesz to zrobić ze skryptu klienta, możesz sprawdzić wartość window.location.host.
if (window.location.host == "localhost") { // Do whatever }
Mam nadzieję że to pomoże.
źródło
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; }
źródło
Powyższe odpowiedzi w większości rozwiązują problem, ale ...
( np. Walidacja, walidacja, brak walidacji )
Jednym z rozwiązań jest ustawienie skrótu lokalizacji i sprawdzenie go.
http://myname.foo.com/form.html#devValidation
Możesz dodać nieograniczoną liczbę opcji za pomocą przełącznika
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; }
źródło
Wyrażenie regularne jest wolniejsze *, ale krótkie i zgrabne. Ponadto nikt tutaj nie sprawdza lokalnego hosta IPv6 (:: 1)
/localhost|127\.0\.0\.1|::1|\.local|^$/i.test(location.hostname)
Sprawdza ogólny host lokalny, domenę lokalną i plik: (pusta nazwa hosta).
*) W przeglądarce Chrome wydajność
[].includes(...)
jest najlepsza (42 ms), po której następuje prosta pętla (for, while) ze sprawdzaniem elementów tablicy (119 ms), następnie[].indexOf(...) > -1
(289 ms) i na końcu wyrażenie regularne (566 ms). Ale te pomiary są w pewnym sensie względne, ponieważ różne przeglądarki są optymalizowane w różny sposób. W FF 52 ESRincludes
iindexOf
mają podobne wyniki, wyrażenie regularne jest 2 × wolniejsze, a pętla 6 × wolniej.źródło
W oparciu o powyższe komentarze, następujące wyrażenie regularne pomogło mi zweryfikować, czy adres URL to „localhost”, dowolny adres IP IPv4 lub 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)
źródło