Come estrarre la parte del nome host di un URL in JavaScript


379

Esiste un modo davvero semplice per iniziare da un URL completo:

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

Ed estrai solo la parte host:

aaa.bbb.ccc.com

Deve esserci una funzione JavaScript che lo fa in modo affidabile, ma non riesco a trovarlo.

Risposte:


827

supponiamo di avere una pagina con questo indirizzo: http://sub.domain.com/virtualPath/page.htm. utilizzare quanto segue nel codice della pagina per ottenere questi risultati:

  • window.location.host: otterrai sub.domain.com:8080osub.domain.com:80
  • window.location.hostname : otterrai sub.domain.com
  • window.location.protocol : otterrai http:
  • window.location.port: otterrai 8080o80
  • window.location.pathname : otterrai /virtualPath
  • window.location.origin: otterrai http://sub.domain.com*****

Aggiornamento: sull'originale

***** Come indicato da ref , la compatibilità del browser per window.location.originnon è chiara. L'ho controllato in Chrome e ha restituito http://sub.domain.com:portse la porta è tutt'altro che 80 e http://sub.domain.comse la porta è 80.

Un ringraziamento speciale a @torazaburo per avermelo detto.


Ho un sito web e 2 applicazioni in IIS. Ad esempio: sub.domain.com/v1 e sub.domain.com/v2 e pagine come sub.domain.com/v1/Default.aspx o sub.domain.com/v2/Products/Default.aspx , ecc. Come I può ottenere value / v2 , il root per la mia applicazione sub.domain.com/v2 ?
Kiquenet,

@Kiquenet usa un IDE javascript come WebStorm, puoi vedere le possibili opzioni mentre scrivi il codice.
Bhargav Nanekalva,

3
window.location.originnon è definito in IE9 (secondo il collegamento, è IE11 +). Questa risposta ha aiutato.
Neolisk,

1
Ovviamente utile per quasi tutti tranne che non risponde alla domanda che è come estrarre la parte host dall'URL. Divertente la risposta corretta con la funzione getRootUrl ha solo 17 voti contro 609 voti.
Miro,

@Miro alla domanda non è vero, il secondo punto elenco risponde alla domanda: window.location.hostname: otterrai sub.domain.com
Paul

155

È possibile concatenare il protocollo di posizione e l'host:

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

Per un url, diciamo 'http://stackoverflow.com/questions', tornerà'http://stackoverflow.com'


5
sembra che dovresti usare "hostname" piuttosto che "host" per ottenere i risultati di cui sopra. fonte: stackoverflow.com/questions/6725890/...
user417669

Puoi usare location.origin con lo stesso risultato.
Sérgio,

1
La domanda originale non ha richiesto la parte del protocollo dell'URL.
Simon East,

36

Usa l' document.locationoggetto e le sue hosto hostnameproprietà.

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

29

La risposta accettata non ha funzionato per me poiché voleva essere in grado di funzionare con qualsiasi URL arbitrario, non solo con l'URL della pagina corrente.

Dai un'occhiata URLall'oggetto :

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"

1
Grazie. Per ore ho cercato il metodo per estrarre l'URL che sto ricevendo da API. È stato così semplice L'avevo letto solo nell'URL con un nuovo URL. Grazie.
Nodirabegimxonoyim,

1
+99999999999999
ADJenks

Una delle due risposte qui che non presumono che tu sia sul lato browser delle cose ...
Will59,

non funziona su IE11 :(
Teoman shipahi

24

Ci sono due modi. La prima è una variante di un'altra risposta qui, ma questa rappresenta le porte non predefinite:

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) : "");
}

Ma preferisco questo metodo più semplice (che funziona con qualsiasi stringa URI):

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

3
Grazie! Mi piace anche il secondo metodo! specialmente quando sul lato server javascript, non c'è modo di ottenere window.location :)
trilioni

Una delle due risposte qui che non presumono che tu sia sul lato browser delle cose ... Ma controlla la più recente di Martin Konecny ​​usando il nuovo URL.
Will59,



3

C'è un altro trucco che uso e che non ho mai visto in nessuna risposta StackOverflow: l'uso dell'attributo "src" di un'immagine produrrà il percorso di base completo del tuo sito. Per esempio :

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

Su un URL come http://domain.com/somesite/index.html, rootverrà impostato su http://domain.com/somesite/. Questo funziona anche per localhost o qualsiasi URL di base valido.

Si noti che ciò causerà una richiesta HTTP non riuscita sul $ sull'immagine fittizia. Puoi invece utilizzare un'immagine esistente per evitarlo, con solo lievi modifiche al codice.

Un'altra variante utilizza un collegamento fittizio, senza effetti collaterali sulle richieste HTTP:

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

Tuttavia, non l'ho provato su tutti i browser.


3

Verificare questo:

alert(window.location.hostname);

questo restituirà il nome host come www.domain.com

e:

window.location.host

restituirà il nome di dominio con porta come www.example.com:80

Per un riferimento completo, consultare il sito degli sviluppatori Mozilla .


2

Vorrei specificare qualcosa. Se qualcuno vuole ottenere l'intero URL con il percorso di cui ho bisogno, può usare:

var fullUrl = window.location.protocol + "//" + window.location.hostname + window.location.pathname;

perché andare più a lungo. Può essere ottenuto con var fullUrl = window.location.origin + window.location.pathname
Anant

ma a volte vuoi aggiungere qualcosa come sottodominio tra il protocollo e il nome host, ad esempio multilingua, ecc.
crx4

2

So che è un po 'tardi, ma ho fatto una piccola funzione pulita con una piccola sintassi ES6

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

Potrebbe anche essere scritto in ES5 come

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

Naturalmente IE non supporta Object.assign, ma nella mia linea di lavoro, non importa.


1

Regex offre molta più flessibilità.

    //document.location.href = "http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah
    //1.
     var r = new RegExp(/http:\/\/[^/]+/);
     var match = r.exec(document.location.href) //gives http://aaa.bbb.ccc.com

    //2. 
     var r = new RegExp(/http:\/\/[^/]+\/[^/]+/);
     var match = r.exec(document.location.href) //gives http://aaa.bbb.ccc.com/asdf
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.