web-dev-qa-db-fra.com

Comment vérifier avec javascript si la connexion est un hôte local?

Je souhaite vérifier mon code javascript si la page en cours de chargement se trouve sur mon ordinateur local.

La raison pour laquelle je souhaite le faire est que, lors de mon développement, je veux m'assurer que la validation côté serveur (C #) fonctionne correctement. J'aime donc voir les erreurs côté client et côté serveur apparaître.

Ainsi, lors de mes tests, jQuery contient un drapeau qui valide les éléments qui permettent toujours aux données non valables d’être transmises. De cette façon, je vois les erreurs côté client et serveur d'un coup.

Cependant, pour le moment, je dois aller et venir manuellement pour passer du développement à la production.

63
chobo2

La variable location.hostname vous donne l'hôte actuel. Cela devrait vous suffire pour déterminer dans quel environnement vous vous trouvez.

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

si vous lancez du HTML statique dans le navigateur, par exemple à partir d’un emplacement tel que file:///C:/Documents and Settings/Administrator/Desktop/, la détection de "localhost" ne fonctionnera pas. location.hostname retournera une chaîne vide. alors

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

Ce n’est toujours pas un problème, mais c’est peut-être une petite amélioration . Vous pouvez maintenant créer un tableau de domaines et utiliser .includes

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

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

Une méthode simple consiste à vérifier le nom d’hôte par rapport à localhost ou votre nom de domaine personnalisé par rapport à une sous-chaîne, dans ce cas des URL ".local", telles que 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!");
}
2
Summit

Vous pouvez détecter dans un de vos codes derrière des pages avec c #, comme ceci:

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

Ou si vous voulez le faire à partir d'un script client, vous pouvez vérifier la valeur de window.location.Host.

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

J'espère que cela t'aides.

1
Samuel Meacham

Les réponses ci-dessus résolvent principalement le problème mais ...

  • Et si localhost n'est pas nécessairement 'localhost /'?
  • Et si vous voulez faire une validation FE pendant le développement?
  • Et si vous voulez des comportements différents pendant le développement
    (fe validation, be validation, pas de validation)

Une solution consiste à définir le hachage de l'emplacement et à le vérifier.

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

Vous pouvez ajouter des options illimitées avec un commutateur

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

La forme la plus courte utilisant le même mécanisme que les autres scripts:

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

L'expression régulière est plus lente *, mais courte et soignée. De plus, personne ici ne vérifie la présence d’hôte local IPv6 (:: 1)

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

Il vérifie le localhost général, le domaine .local et le fichier: (nom d’hôte vide).

*) Sous Chrome, les performances de [].includes(...) sont les meilleures (42 ms), suivies de la boucle simple (pour, while) avec vérification des éléments du tableau (119 ms), puis de [].indexOf(...) > -1 (289 ms) et enfin de l'expression rationnelle (566 ms) Mais ces mesures sont en quelque sorte relatives, car différents navigateurs sont optimisés différemment. Dans FF 52, ESR includes et indexOf ont des résultats similaires, l’expression rationnelle est 2 × plus lente et la boucle 6 × plus lente.

0
mikiqex