144 votes

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

Je veux vérifier dans mon javascript si la page qui se charge est sur ma machine locale.

La raison pour laquelle je veux faire cela est que lorsque je développe, j'aime m'assurer que la validation côté serveur (C#) fonctionne correctement. J'aime donc voir apparaître les erreurs côté client et côté serveur.

Donc, pendant que je teste, j'ai un drapeau dans mon truc de validation jquery qui laisse toujours passer les données invalides. De cette façon, je vois les erreurs côté client et côté serveur en une seule fois.

Cependant, à l'heure actuelle, je dois effectuer manuellement les changements nécessaires pour passer du développement à la production.

11voto

Holtwick Points 812

Le code suivant vérifie si une adresse est localhost c'est-à-dire s'il pointe vers le même dispositif que celui à partir duquel cette demande est faite.

export function isLocalHost(hostname = window.location.hostname) {
  return ['localhost', '127.0.0.1', '', '::1'].includes(hostname)
}

Le code suivant vérifie également si la demande est introduite dans le fichier réseau local . Dans certains cas courants, les adresses IP du réseau local commencent par 10.0. o 192.168. ou mDNS / Bonjour comme les domaines se terminant par .local :

export function isLocalNetwork(hostname = window.location.hostname) {
  return (
    (['localhost', '127.0.0.1', '', '::1'].includes(hostname))
    || (hostname.startsWith('192.168.'))
    || (hostname.startsWith('10.'))
    || (hostname.endsWith('.local'))
  )
}

4voto

antelove Points 617
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;
}

3voto

Summit Points 1143

Une façon simple de procéder serait de vérifier le nom d'hôte par rapport à localhost ou de vérifier votre nom de domaine personnalisé par rapport à une sous-chaîne, dans ce cas les urls ".local", comme par exemple 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!");
}

1voto

Samuel Meacham Points 5058

Vous pourriez détecter dans l'une de vos pages de code derrière 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 du client script, vous pouvez vérifier la valeur de window.location.host.

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

J'espère que cela vous aidera.

0voto

Shanimal Points 4067

Les réponses ci-dessus résolvent en grande partie le problème, mais...

  • Et si localhost n'est pas nécessairement 'localhost/' ?
  • Que faire si l'on souhaite procéder à une validation FE pendant le développement ?
  • Que faire si l'on veut des comportements différents pendant la phase de développement ?
    ( fe validation, be validation, no 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 un nombre illimité d'options à l'aide d'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;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X