Ottieni il nome di dominio corrente con Javascript (non il percorso, ecc.)


246

Ho intenzione di acquistare due nomi di dominio per lo stesso sito. A seconda del dominio utilizzato, intendo fornire dati leggermente diversi sulla pagina. Esiste un modo per rilevare il nome di dominio effettivo da cui viene caricata la pagina in modo da sapere a cosa modificare il mio contenuto?

Ho cercato cose come questa, ma la maggior parte non funziona come voglio.

Ad esempio quando si utilizza

document.write(document.location)

su JSFiddle ritorna

http://fiddle.jshell.net/_display/

cioè il percorso effettivo o qualunque cosa sia.


1
Non sono sicuro di capire esattamente cosa vuoi fare, ma probabilmente dovresti dare un'occhiata a MDN riguardo a questo
MilkyWayJoe

Un po 'di argomento, ma potresti anche considerare di avere sottodomini piuttosto che due nomi di dominio separati. Qualcosa del genere premium.random.comefree.random.com
T.Chmelevskij il

Risposte:


456

Che ne dite di:

window.location.hostname

L' locationoggetto ha in realtà un numero di attributi che si riferiscono a diverse parti dell'URL


55
e window.location.hostnamese non vuoi ottenere il port(mi piace http://localhost:3000/, window.location.host = 'localhost:3000'ewindow.location.hostname = 'localhost'
Guilherme,

6
La risposta è errata perché la porta non appartiene al dominio. E window.location.hosta volte restituirà la porta.
Andrej

4
Questo restituisce anche il nome del server ("www.amazingjokes.com", anziché solo ".amazingjokes.com")
patrick,

Nel caso in cui tu abbia un DNS di inoltro potresti aver bisogno di questo - window.location.ancestorOrigins
Kirill Gusyatin

128

Prova a eseguire nello script: percorso: http: // localhost: 4200 / landing? Query = 1 # 2

console.log(window.location.hash)

La posizione ha i seguenti valori:

window.location.hash: "#2"

window.location.host: "localhost:4200"

window.location.hostname: "localhost"

window.location.href: "http://localhost:4200/landing?query=1#2"

window.location.origin: "http://localhost:4200"

window.location.pathname: "/landing"

window.location.port: "4200"

window.location.protocol: "http:"

window.location.search: "?query=1"

3
Questa è un'ottima risposta!
Andrew Campbell,

2
Adoro le risposte con diversi esempi. Grazie mille.
Magno Alberto,

24

Se non sei interessato al nome host (ad esempio www.beta.example.com) ma al nome di dominio (ad esempio example.com), questo funziona con nomi host validi:

function getDomainName(hostName)
{
    return hostName.substring(hostName.lastIndexOf(".", hostName.lastIndexOf(".") - 1) + 1);
}

13
Inesatto, questo si romperà su quasi tutti i TLD internazionali.
tbranyen,

4
@tbranyen puoi spiegare a cosa ti riferisci? L'unico caso a cui riesco a pensare sono i sottodomini come amazon.co.uk. Ma sicuramente non "quasi tutti i TLD internazionali". In effetti funziona con il 100% dei codici paese trovati in Wikipedia
cprcrack,

1
cprcrack per qualche motivo ho pensato che più tlds internazionali (in america) contenessero più punti. Grazie per la correzione!
tbranyen,

Un certo numero di paesi lavora in modo simile al Regno Unito: hanno fisso domini di secondo livello e puoi registrare solo domini di terzo livello. Un elenco di questi paesi è su Wikipedia .
Gareth

18
function getDomain(url, subdomain) {
    subdomain = subdomain || false;

    url = url.replace(/(https?:\/\/)?(www.)?/i, '');

    if (!subdomain) {
        url = url.split('.');

        url = url.slice(url.length - 2).join('.');
    }

    if (url.indexOf('/') !== -1) {
        return url.split('/')[0];
    }

    return url;
}

Esempi

La versione precedente stava ottenendo il dominio completo (incluso il sottodominio). Ora determina il dominio giusto in base alle preferenze. In modo che quando un secondo argomento viene fornito come vero includerà il sottodominio, altrimenti restituisce solo il "dominio principale"


1
Questa dovrebbe essere la risposta, funziona anche dentro localhost/test.phpe quella la risposta corretta localhost.
Mohammad AlBanna,

È anche la risposta migliore perché funziona con qualsiasi URL che passi, non solo con l'attuale window.location
sohtimsso1970

Se lo fai google.co.ukper, otterrai "co.uk", il che non è corretto ...
James Douglas

Sì. È un affare difficile. Ancora più complicato se hai anche dei sottodomini (come: test.google.co.uk). Se vuoi usare questa versione grezza sono necessarie alcune serie modifiche (magari aggiungendo anche un elenco speciale per quei tld).
adelineu

10

Puoi ottenerlo facilmente dall'oggetto posizione in Javascript:

Ad esempio, l'URL di questa pagina è:

http://www.stackoverflow.com/questions/11401897/get-the-current-domain-name-with-javascript-not-the-path-etc

Quindi possiamo ottenere il dominio esatto con le seguenti proprietà dell'oggetto location:

location.host = "www.stackoverflow.com"
location.protocol= "http:"

puoi creare l'intero dominio con:

location.protocol + "//" + location.host

Che in questo esempio restituisce http://www.stackoverflow.com

Aggiungendo questo possiamo ottenere l'URL completo e anche il percorso con altre proprietà dell'oggetto location:

location.href= "http://www.stackoverflow.com/questions/11401897/get-the-current-domain-name-with-javascript-not-the-path-etc"    
location.pathname= "questions/11401897/get-the-current-domain-name-with-javascript-not-the-path-etc"

7

Se sei interessato solo al nome di dominio e desideri ignorare il sottodominio, devi analizzarlo da hoste hostname.

Il seguente codice fa questo:

var firstDot = window.location.hostname.indexOf('.');
var tld = ".net";
var isSubdomain = firstDot < window.location.hostname.indexOf(tld);
var domain;

if (isSubdomain) {
    domain = window.location.hostname.substring(firstDot == -1 ? 0 : firstDot + 1);
}
else {
  domain = window.location.hostname;
}

http://jsfiddle.net/5U366/4/


Perché restituisce jShell invece di jsFiddle?
Freesnöw,

2
@XanderLamkins: è un iframe: jsfiddle.net/5U366 <-> fiddle.jshell.net/5U366/show
Saxoier

7

Poiché questa domanda richiede un nome di dominio, non un nome host, dovrebbe essere una risposta corretta

window.location.hostname.split('.').slice(-2).join('.')

Funziona anche con nomi host come www.example.com .


1
Funziona ma non funziona con domini come domain.co.uk, domain.com.br .. Come posso farlo funzionare con qualsiasi dominio?
Sameh,

6

Uso

document.write(document.location.hostname)​

window.locationha un sacco di proprietà. Vedi qui per un elenco di essi.


5

Se desideri un'origine di dominio completo, puoi utilizzare questo:

document.location.origin

E se desideri ottenere solo il dominio, puoi usare solo questo:

document.location.hostname

Ma hai altre opzioni, dai un'occhiata alle proprietà in:

document.location

5

Che mi dici di questa funzione?

window.location.hostname.match(/\w*\.\w*$/gi)[0]

Questo corrisponderà solo al nome di dominio indipendentemente dal fatto che sia un sottodominio o un dominio principale


1
Mi piace questa risposta. Ma dovresti essere consapevole che se lo usi per scopi di sicurezza .. può essere bypassato. Vale a dire se vuoi assicurarti di essere su example.com, allora hacker-example.com equivarrebbe anche a 'example.com'. window.location.hostname.match (/ [a-zA-Z0-9 -] * \. [a-zA-Z0-9 -] * $ /) [0] funziona.
hiburn8,

4

Se vuoi ottenere il nome di dominio in JavaScript, usa il seguente codice:

var domain_name = document.location.hostname;
alert(domain_name);

Se è necessario accedere al percorso dell'URL della pagina Web per poter accedere al percorso dell'URL Web, utilizzare questo esempio:

var url = document.URL;
alert(url);


1

Sono nuovo di JavaScript, ma non puoi semplicemente usare: document.domain ?

Esempio:

<p id="ourdomain"></p>

<script>
var domainstring = document.domain;
document.getElementById("ourdomain").innerHTML = (domainstring);
</script>

Produzione:

domain.com

o

www.domain.com

A seconda di cosa usi sul tuo sito web.


0

Immagino che dovrebbe essere semplice come questo:

url.split("/")[2]


Per me va bene. Le soluzioni precedenti si basano su documento, posizione o oggetto finestra.
Cris,

0

Combinando alcune risposte di cui sopra, quanto segue funziona davvero bene per me per la distruzione dei cookie:

  /**
   * Utility method to obtain the domain URI:
   */
  fetchDomainURI() {
    if (window.location.port.length > 0) {
      return window.location.hostname;
    }
    return `.${window.location.hostname.match(/\w*\.\w*$/gi)[0]}`;
  }

Funziona con indirizzi IP con porte, ad es. 0.0.0.0:8000 ecc., Così come domini complessi come app.staging.example.comreturn .example.com=> consente l'impostazione e la distruzione di cookie tra domini.


0

Se si desidera il nome di dominio del paese, ad esempio per estrarre  .com   da stackoverflow.com:

(ES6):

const getCountryDomainName = () => {
  let hostName = window.location.hostname;
  let lastDotIndex = hostName.lastIndexOf('.');
  let countryDomainName = hostName.substr(lastDotIndex+1, hostName.length);
  return countryDomainName;
}

(ES5):

function getCountryDomainName() {
  let hostName = window.location.hostname;
  let lastDotIndex = hostName.lastIndexOf('.');
  let countryDomainName = hostName.substr(lastDotIndex+1, hostName.length);
  return countryDomainName;
}

Quindi, basta usare la funzione per assegnare il valore a un var:

const countryDomainName = getCountryDomainName();

-2
       Feel free to visit our “<a href="javascript:document.location.href=document.location.origin+'/contact-us'" title="Click to Contact Us" class="coded_link" ><span class="ui-icon ui-icon-newwin"></span>Contact</a>” link

Effettivamente ha funzionato per me mentre non potevo usare PHP

Ho appena provato che ha funzionato grazie all'approccio sopra citato in alcune delle risposte, così rapido e verificato che ha funzionato


@Brandito Grazie, beh, quel sito è stato ospitato in un host virtuale AWS, credo che usare wordpress e non so perché stia dando problemi a farlo in quel modo ... Non sono sicuro che sia stato un reindirizzamento sbagliato o qualcosa che doveva fare con la mod di backend riscrivi le regole .. Inoltre volevo usare una toolip e un'icona a tema jquery con esso. Approvato innanzitutto dal cliente ovviamente: '-)
Jean Paul AKA el_vete l'
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.