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.
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!");
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!");
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!");
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!");
}
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.
Les réponses ci-dessus résolvent principalement le problème mais ...
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;
}
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 !");
}
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.