what Wie prüfe ich mit Javascript, ob die Verbindung ein lokaler Host ist?




what is jquery (7)

Ich möchte in meinem Javascript nachsehen, ob die Seite geladen wird, die sich auf meinem lokalen Computer befindet.

Der Grund, warum ich das tun möchte, ist, dass ich beim Entwickeln sicherstellen möchte, dass die Validierung auf Serverseite (C #) ordnungsgemäß funktioniert. Daher möchte ich, dass sowohl die clientseitigen als auch die serverseitigen Fehler angezeigt werden.

Während ich teste, habe ich eine Markierung in meiner Jquery-Validierungssache, die nur immer ungültige Daten durchlässt. Auf diese Weise sehe ich die Client- und Serverfehler auf einmal.

Im Moment muss ich jedoch manuell hin und her wechseln, wenn ich von der Entwicklung zur Produktion gehe.


Der reguläre Ausdruck ist langsamer *, aber kurz und ordentlich. Außerdem prüft hier niemand nach IPv6-Localhost (:: 1).

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

Es wird nach allgemeinem localhost, .local-Domäne und Datei gesucht: (leerer Hostname).

*) In Chrome ist die Leistung von [].includes(...) die beste (42 ms), gefolgt von einer einfachen Schleife (für, während) mit Array- [].indexOf(...) > -1 119 ms) und dann [].indexOf(...) > -1 (289 ms) und schließlich der Regexp (566 ms). Diese Messungen sind jedoch relativ, weil verschiedene Browser unterschiedlich optimiert werden. In FF 52 haben ESR- includes und indexOf ähnliche Ergebnisse, Regexp ist 2 × langsamer und Loop 6 × langsamer.


Ein einfacher Weg, dies zu tun, wäre, einfach den Hostnamen mit localhost zu vergleichen oder den benutzerdefinierten Domainnamen mit einem Teilstring, in diesem Fall ".local" -URLs, wie http: //testsite.local, zu überprüfen

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

Immer noch kein Haken, aber es könnte eine kleine Verbesserung sein. Sie können jetzt ein Array von Domänen erstellen und .includes

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

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

Die obigen Antworten lösen meistens das Problem, aber ...

  • Was ist, wenn localhost nicht unbedingt 'localhost /' ist?
  • Was ist, wenn Sie die FE-Validierung während der Entwicklung durchführen möchten?
  • Was ist, wenn Sie unterschiedliche Verhaltensweisen während der Entwicklung wünschen
    ( zB Validierung, Validierung, keine Validierung )

Eine Lösung besteht darin, den Standort-Hash festzulegen und zu überprüfen.

http://myname.foo.com/form.html#devValidation

Sie können unbegrenzte Optionen mit einem Schalter hinzufügen

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

Die Variable location.hostname gibt den aktuellen Host an. Das sollte ausreichen, um festzustellen, in welcher Umgebung Sie sich befinden.

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

Wenn Sie statische HTML- file:///C:/Documents and Settings/Administrator/Desktop/ im Browser starten, z. B. von einem Ort wie file:///C:/Documents and Settings/Administrator/Desktop/ "localhost" wird nicht funktionieren. location.hostname gibt eine leere Zeichenfolge zurück. so

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

Kürzeste Form, die dieselbe Mechanik wie andere Skripte verwendet:

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




localhost