Obtenez le nom de domaine actuel avec Javascript (pas le chemin, etc.)


246

J'ai l'intention d'acheter deux noms de domaine pour le même site. Selon le domaine utilisé, je prévois de fournir des données légèrement différentes sur la page. Existe-t-il un moyen pour moi de détecter le nom de domaine réel à partir duquel la page se charge afin que je sache vers quoi changer mon contenu?

J'ai cherché des trucs comme ça, mais la plupart ne fonctionnent pas comme je le souhaite.

Par exemple lors de l'utilisation

document.write(document.location)

sur JSFiddle il revient

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

c'est-à-dire le chemin réel ou quoi que ce soit.


1
Je ne sais pas si je comprends exactement ce que vous voulez faire, mais vous devriez probablement jeter un œil à MDN à ce sujet
MilkyWayJoe

Un peu de sujet, mais vous pouvez également envisager d'avoir des sous-domaines plutôt que deux noms de domaine distincts. Quelque chose comme premium.random.cometfree.random.com
T.Chmelevskij

Réponses:


456

Que diriez-vous:

window.location.hostname

L' locationobjet possède en fait un certain nombre d'attributs faisant référence à différentes parties de l'URL


55
et window.location.hostnamesi vous ne voulez pas obtenir le port(comme http://localhost:3000/, window.location.host = 'localhost:3000'etwindow.location.hostname = 'localhost'
Guilherme

6
La réponse est fausse car le port n'appartient pas au domaine. Et window.location.hostrendra parfois le port.
Andrej

4
Cela renvoie également le nom du serveur ('www.amazingjokes.com', au lieu de simplement '.amazingjokes.com')
patrick

Dans le cas où vous avez transféré le DNS, vous pourriez avoir besoin de celui-ci - window.location.ancestorOrigins
Kirill Gusyatin

128

Essayez d'exécuter dans le script: chemin: http: // localhost: 4200 / landing? Query = 1 # 2

console.log(window.location.hash)

L'emplacement a les valeurs suivantes:

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
C'est une excellente réponse!
Andrew Campbell

2
J'adore les réponses avec plusieurs exemples. Merci beaucoup.
Magno Alberto

24

Si vous n'êtes pas intéressé par le nom d'hôte (par exemple www.beta.example.com) mais par le nom de domaine (par exemple example.com), cela fonctionne pour les noms d'hôte valides:

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

13
Incorrect, cela interrompt presque tous les TLD internationaux.
tbranyen

4
@tbranyen pouvez-vous expliquer de quoi vous parlez? Le seul cas auquel je peux penser est celui des sous-domaines amazon.co.uk. Mais certainement pas "presque tous les TLD internationaux". En fait, cela fonctionne avec 100% des codes de pays trouvés dans Wikipedia
cprcrack

1
cprcrack pour une raison quelconque, je pensais que les tld plus internationaux (vers l'amérique) contenaient plusieurs points. Merci d'avoir corrigé!
tbranyen

Un certain nombre de pays fonctionnent de manière similaire au Royaume-Uni: ils ont des domaines fixes de deuxième niveau et vous ne pouvez enregistrer des domaines qu'au troisième niveau. Une liste de ces pays est sur 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;
}

Exemples

La version précédente obtenait le domaine complet (y compris le sous-domaine). Maintenant, il détermine le bon domaine en fonction de vos préférences. De sorte que lorsqu'un deuxième argument est fourni comme vrai, il inclura le sous-domaine, sinon il ne renvoie que le «domaine principal»


1
Cela devrait être la réponse, cela fonctionne même dans localhost/test.phpet que la bonne réponse localhost.
Mohammad AlBanna

C'est aussi la meilleure réponse car elle fonctionne avec toutes les URL que vous transmettez, pas seulement avec la
fenêtre

Si vous faites cela google.co.ukpour vous obtiendrez «co.uk», ce qui n'est pas correct ...
James Douglas

Oui. C'est une affaire délicate. Encore plus compliqué si vous avez aussi des sous-domaines (comme: test.google.co.uk). Si vous souhaitez utiliser cette version brute, des ajustements sérieux sont nécessaires (peut-être même en ajoutant une liste spéciale pour ces tlds).
adelineu

10

Vous pouvez facilement l'obtenir à partir d'un objet de localisation en Javascript:

Par exemple, l'URL de cette page est:

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

Ensuite, nous pouvons obtenir le domaine exact avec les propriétés suivantes de l'objet de localisation:

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

vous pouvez créer le domaine complet avec:

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

Qui dans cet exemple renvoie http://www.stackoverflow.com

En plus de cela, nous pouvons obtenir l'URL complète et également le chemin avec d'autres propriétés de l'objet de localisation:

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

Si vous êtes uniquement intéressé par le nom de domaine et souhaitez ignorer le sous-domaine, vous devez l'analyser hostethostname .

Le code suivant le fait:

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/


Pourquoi renvoie-t-il jShell au lieu de jsFiddle?
Freesnöw

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

7

Étant donné que cette question demande un nom de domaine, pas un nom d'hôte, une réponse correcte doit être

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

Cela fonctionne également pour les noms d'hôtes comme www.example.com .


1
Cela fonctionne mais ne fonctionne pas avec des domaines comme domain.co.uk, domain.com.br .. Comment puis-je le faire fonctionner avec n'importe quel domaine?
Sameh

6

Utilisation

document.write(document.location.hostname)​

window.locationa un tas de propriétés. Voir ici pour une liste d'entre eux.


5

Si vous souhaitez une origine de domaine complète, vous pouvez utiliser ceci:

document.location.origin

Et si vous souhaitez n'obtenir que le domaine, vous pouvez simplement utiliser ceci:

document.location.hostname

Mais vous avez d'autres options, jetez un œil aux propriétés dans:

document.location

5

Et cette fonction?

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

Cela correspondra uniquement au nom de domaine, que ce soit un sous-domaine ou un domaine principal


1
J'aime cette réponse. Mais vous devez savoir que si vous l'utilisez à des fins liées à la sécurité .. il peut être contourné. C'est-à-dire si vous voulez vous assurer que vous êtes sur example.com, alors hacker-example.com serait également égal à 'example.com'. window.location.hostname.match (/ [a-zA-Z0-9 -] * \. [a-zA-Z0-9 -] * $ /) [0] fonctionne.
hiburn8

4

Si vous souhaitez obtenir le nom de domaine en JavaScript, utilisez simplement le code suivant:

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

Si vous avez besoin d'un chemin d'URL de page Web pour pouvoir accéder au chemin d'URL Web, utilisez cet exemple:

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


1

Je suis nouveau sur JavaScript, mais vous ne pouvez pas simplement utiliser: document.domain ?

Exemple:

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

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

Production:

domain.com

ou

www.domain.com

Selon ce que vous utilisez sur votre site Web.


0

Je pense que cela devrait être aussi simple que ceci:

url.split("/")[2]


Travaille pour moi. Les solutions précédentes reposent sur un document, un emplacement ou un objet fenêtre.
Cris

0

En combinant quelques réponses de ce qui précède, ce qui suit fonctionne très bien pour moi pour détruire les cookies:

  /**
   * 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]}`;
  }

Fonctionne pour les adresses IP avec des ports, par exemple, 0.0.0.0:8000, etc., ainsi que pour les domaines complexes comme le app.staging.example.comretour .example.com=> permet la définition et la destruction de cookies inter-domaines.


0

Si vous voulez que le nom de domaine du pays - par exemple pour extraire  .com   de 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;
}

Ensuite, utilisez simplement la fonction pour affecter la valeur à 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

En effet a fonctionné pour moi alors que je ne pouvais pas utiliser PHP

Je viens de tester que cela a fonctionné grâce à l'approche mentionnée ci-dessus dans certaines des réponses, donc rapide et vérifié qui a fonctionné


@Brandito Merci, eh bien, ce site était hébergé dans un hôte virtuel AWS, je crois en utilisant wordpress et je ne sais pas pourquoi cela posait des problèmes pour le faire de cette façon ... Je ne sais pas si c'était une mauvaise redirection ou quelque chose à faire avec les règles de réécriture du module principal. De plus, je voulais utiliser une info-bulle et une icône sur le thème jquery ui avec. Approuvé par le client tout d'abord bien sûr: '-)
Jean Paul AKA el_vete
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.