404 votes

Comment extraire la partie "nom d'hôte" d'une URL en JavaScript ?

Existe-t-il un moyen vraiment simple de commencer à partir d'une URL complète ?

document.location.href = "http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah"

Et extraire seulement la partie hôte :

aaa.bbb.ccc.com

Il doit y avoir une fonction JavaScript qui fait ça de manière fiable, mais je ne la trouve pas.

882voto

AminSaghi Points 3844

Supposons que vous ayez une page avec cette adresse : http://sub.domain.com/virtualPath/page.htm . utilisez le code suivant dans la page pour obtenir ces résultats :

  • window.location.host : vous obtiendrez sub.domain.com:8080 o sub.domain.com:80
  • window.location.hostname : vous obtiendrez sub.domain.com
  • window.location.protocol : vous obtiendrez http:
  • window.location.port : vous obtiendrez 8080 o 80
  • window.location.pathname : vous obtiendrez /virtualPath
  • window.location.origin : vous obtiendrez http://sub.domain.com *****

Mise à jour : à propos du .origin

***** Comme le réf. les états, la compatibilité des navigateurs pour window.location.origin n'est pas clair. Je l'ai vérifié dans chrome et ça renvoie http://sub.domain.com:port si le port est autre que 80, et http://sub.domain.com si le port est 80.

Merci à @torazaburo de me l'avoir signalé.

0 votes

J'ai un site web et deux applications dans IIS. Par exemple sub.domain.com/v1 y sub.domain.com/v2 et des pages comme sub.domain.com/v1/Default.aspx o sub.domain.com/v2/Produits/Défaut.aspx etc. Comment puis-je obtenir la valeur /v2 la racine pour mon application sub.domain.com/v2 ?

0 votes

@Kiquenet utilisez un IDE javascript comme WebStorm, vous pouvez voir les options possibles pendant que vous écrivez le code.

3 votes

window.location.origin n'est pas défini dans IE9 (selon le lien, c'est IE11+). Cette réponse aidé.

162voto

CMS Points 315406

Vous pourriez concaténer le protocole de localisation et l'hôte :

var root = location.protocol + '//' + location.host;

Pour une url, disons 'http://stackoverflow.com/questions' il retournera 'http://stackoverflow.com'

5 votes

Il semble que vous devriez utiliser "hostname" plutôt que "host" pour obtenir les résultats ci-dessus. source : stackoverflow.com/questions/6725890/

0 votes

Vous pouvez utiliser location.origin avec le même résultat.

1 votes

La question originale ne demandait pas la partie protocole de l'URL.

36voto

n1313 Points 5853

Utilisez document.location et son host o hostname propriétés.

alert(document.location.hostname); // alerts "stackoverflow.com"

24voto

danorton Points 3458

Il y a deux façons de procéder. La première est une variante d'une autre réponse ici, mais celle-ci tient compte des ports qui ne sont pas par défaut :

function getRootUrl() {
  var defaultPorts = {"http:":80,"https:":443};

  return window.location.protocol + "//" + window.location.hostname
   + (((window.location.port)
    && (window.location.port != defaultPorts[window.location.protocol]))
    ? (":"+window.location.port) : "");
}

Mais je préfère cette méthode plus simple (qui fonctionne avec n'importe quelle chaîne URI) :

function getRootUrl(url) {
  return url.toString().replace(/^(.*\/\/[^\/?#]*).*$/,"$1");
}

3 votes

Merci. J'aime mieux la deuxième méthode aussi ! surtout quand le javascript côté serveur ne permet pas d'obtenir window.location :)

0 votes

Une des deux réponses ici qui ne suppose pas que vous êtes du côté du navigateur... Mais regardez la réponse plus récente de Martin Konecny qui utilise une nouvelle URL.

7voto

Chris Nielsen Points 7492

Essayez

document.location.host

o

document.location.hostname

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