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

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

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

Et extraire uniquement la partie hôte:

aaa.bbb.ccc.com

Il doit y avoir une fonction JavaScript qui le fait de manière fiable, mais je ne peux pas le trouver.

317
demandé sur Community 2009-09-02 19:03:33

11 réponses

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 ou sub.domain.com:80
  • window.location.hostname: vous obtiendrez sub.domain.com
  • window.location.protocol: Vous obtiendrez http:
  • window.location.port: Vous obtiendrez 8080 ou 80
  • window.location.pathname: Vous obtiendrez /virtualPath
  • window.location.origin : vous aurez http://sub.domain.com *****

Mise à jour: A propos de la .origine

***** le ref unis, la compatibilité du navigateur pour window.location.origin n'est pas claire. Je l'ai vérifié dans chrome et il a retourné http://sub.domain.com:port si le port est autre chose que 80, et http://sub.domain.com si le port est 80.

Un merci spécial à @ torazaburo de m'en avoir parlé.

694
répondu AminSaghi 2017-03-02 04:01:43

Vous pouvez 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 sera de retour 'http://stackoverflow.com'

139
répondu CMS 2009-09-02 15:08:30

Utilisez l'objet document.location et ses propriétés host ou hostname.

alert(document.location.hostname); // alerts "stackoverflow.com"
35
répondu n1313 2009-09-02 15:09:40

Il y a deux façons. Le premier est une variante d'une autre réponse ici, mais celle-ci tient compte des ports non 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 D'URI):

function getRootUrl(url) {
  return url.toString().replace(/^(.*\/\/[^\/?#]*).*$/,"$1");
}
19
répondu danorton 2012-09-06 23:48:03

La réponse acceptée n'a pas fonctionné pour moi car je voulais pouvoir travailler avec n'importe quelle url arbitraire, pas seulement l'URL de la page actuelle.

Jetez un oeil à la URL objet:

var url = new URL("http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah");
url.protocol;  // "http:"
url.hostname;  // "aaa.bbb.ccc.com"
url.pathname;  // "/asdf/asdf/sadf.aspx"
url.search;    // "?blah"
10
répondu Martin Konecny 2017-05-30 21:16:56

Essayez

document.location.host

Ou

document.location.hostname
6
répondu Chris Nielsen 2013-03-20 15:44:51

Utiliser

Fenêtre.emplacement.origine

Et pour: " http://aaa.bbb.ccc.ddd.com/sadf.aspx?blah "

, Vous obtiendrez: http://aaa.bbb.ccc.ddd.com/

6
répondu Idan Wender 2013-04-08 14:09:54

Il y a un autre hack que j'utilise et que je n'ai jamais vu dans une réponse StackOverflow : l'utilisation de l'attribut " src " d'une image donnera le chemin de base complet de votre site. Par exemple:

var dummy = new Image;
dummy.src = '$';                  // using '' will fail on some browsers
var root = dummy.src.slice(0,-1); // remove trailing '$'

Sur une URL comme http://domain.com/somesite/index.html, {[3] } sera défini sur http://domain.com/somesite/. Cela fonctionne également pour localhost ou toute URL de base valide.

Notez que cela entraînera l'échec d'une requête HTTP sur l'image fictive $. Vous pouvez utiliser une image existante à la place pour éviter cela, avec seulement de légères modifications de code.

Une autre variante utilise un lien factice, sans effet secondaire sur les requêtes HTTP:

var dummy = document.createElement ('a');
dummy.href = '';
var root = dummy.href;

Je ne l'ai pas testé sur tous les navigateurs, cependant.

3
répondu kuroi neko 2013-11-30 17:39:36

Vérifiez ceci:

alert(window.location.hostname);

Cela retourne le nom d'hôte comme www.domain.com

Et:

window.location.host

Renverra le nom de domaine avec le port comme www.example.com:80

Pour une vérification complète des références Mozilla developer site.

2
répondu code.rider 2015-03-19 12:24:05

Je voudrais préciser quelque chose. Si quelqu'un veut obtenir l'url entière avec le chemin comme j'ai besoin, peut utiliser:

var fullUrl = window.location.protocol + "//" + window.location.hostname + window.location.pathname;
2
répondu M. Canvar 2015-12-11 14:40:09

Je sais que c'est un peu tard, mais j'ai fait une petite fonction propre avec une petite syntaxe ES6

function getHost(href){
  return Object.assign(document.createElement('a'), { href }).host;
}

Il pourrait également être écrit dans ES5 comme

function getHost(href){
  return Object.assign(document.createElement('a'), { href: href }).host;
}

Bien sûr, IE ne supporte pas Object.assign, mais dans mon travail, cela n'a pas d'importance.

1
répondu Noah Cardoza 2017-12-19 21:23:13