Obtenha o nome de domínio atual com Javascript (não é o caminho etc.)


245

Eu pretendo comprar dois nomes de domínio para o mesmo site. Dependendo do domínio usado, pretendo fornecer dados ligeiramente diferentes na página. Existe uma maneira de eu detectar o nome de domínio real do qual a página está carregando, para que eu saiba para o que alterar meu conteúdo?

Eu olhei em volta para coisas como essa, mas a maioria delas não funciona do jeito que eu quero.

Por exemplo, ao usar

document.write(document.location)

no JSFiddle ele retorna

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

ou seja, o caminho real ou o que quer que seja.


1
Eu não tenho certeza se eu entendo exatamente o que você quer fazer, mas você provavelmente deve dar uma olhada em MDN no que diz respeito a este
— MilkyWayJoe

Um pouco de tópico, mas você também pode considerar ter subdomínios em vez de dois nomes de domínio separados. Algo como premium.random.comefree.random.com
— T.Chmelevskij

Respostas:


454

E se:

window.location.hostname

Na locationverdade, o objeto possui vários atributos referentes a diferentes partes da URL


55
e window.location.hostnamese você não quiser obter o port(like http://localhost:3000/, window.location.host = 'localhost:3000'ewindow.location.hostname = 'localhost'
— Guilherme

6
A resposta está errada porque a porta não pertence ao domínio. E window.location.host, às vezes, devolve a porta.
— 21416 Andrej

4
Isso também retorna o nome do servidor ('www.amazingjokes.com', em vez de apenas '.amazingjokes.com')
— patrick

Caso você tenha o encaminhamento de DNS, pode ser necessário - window.location.ancestorOrigins
— Kirill Gusyatin

123

Tente executar no script: caminho: http: // localhost: 4200 / landing? Query = 1 # 2

console.log(window.location.hash)

O local possui os seguintes valores:

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
Esta é uma ótima resposta!
— Andrew Campbell

2
Adoro respostas com vários exemplos. Muito obrigado.
— Magno Alberto

24

Se você não está interessado no nome do host (por exemplo www.beta.example.com), mas no nome do domínio (por exemplo example.com), isso funciona para nomes de host válidos:

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

13
Incorreto, isso ocorrerá em quase todos os TLDs internacionais.
— tbranyen 19/09/14

4
@tbranyen, você pode explicar a que você está se referindo? O único caso em que posso pensar são subdomínios amazon.co.uk. Mas definitivamente não "quase todos os TLDs internacionais". De fato, ele funciona com 100% dos códigos de países encontrados na Wikipedia
— cprcrack

1
Por algum motivo, o cprcrack achei que mais países internacionais (para a América) continham vários pontos. Obrigado por corrigir!
— precisa saber é o seguinte

Vários países trabalham de maneira semelhante ao Reino Unido: eles corrigiram domínios de segundo nível e você só pode registrar domínios no terceiro nível. Uma lista desses países está na 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;
}

Exemplos

A versão anterior estava obtendo domínio completo (incluindo subdomínio). Agora, ele determina o domínio certo, dependendo da preferência. Assim, quando um segundo argumento for fornecido como verdadeiro, ele incluirá o subdomínio; caso contrário, ele retornará apenas o 'domínio principal'


1
Essa deve ser a resposta, funciona mesmo localhost/test.phpe a resposta correta localhost.
— Mohammad Albanna

É também a melhor resposta, porque ele funciona com qualquer URL que você passar em, não apenas o window.location atual
— sohtimsso1970

Se você faz isso google.co.ukpara você obterá 'co.uk' para trás, o que não é correto ...
— James Douglas

Sim. Esse é um negócio complicado. Ainda mais complicado se você também tiver subdomínios (como: test.google.co.uk). Se você quiser usar esta versão bruta, são necessários alguns ajustes sérios (talvez até adicione uma lista especial para esses tlds).
— Adelineu 8/11

10

Você pode obtê-lo do objeto de localização em Javascript facilmente:

Por exemplo, o URL desta página é:

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

Em seguida, podemos obter o domínio exato com as seguintes propriedades do objeto de localização:

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

você pode criar o domínio completo com:

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

Que neste exemplo retorna http://www.stackoverflow.com

Além disso, podemos obter URL completo e também o caminho com outras propriedades do objeto de localização:

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 você estiver interessado apenas no nome do domínio e quiser ignorar o subdomínio, precisará analisá-lo de hoste hostname.

O código a seguir faz isso:

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/


Por que ele retorna jShell em vez de jsFiddle?
— Freesnöw

2
@XanderLamkins: é um iframe: jsfiddle.net/5U366 <-> fiddle.jshell.net/5U366/show
— Saxoier

7

Como esta pergunta pede nome de domínio, não nome de host, uma resposta correta deve ser

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

Isso funciona também para nomes de host como www.example.com .


1
Isso funciona, mas não funciona com domínios como domain.co.uk, domain.com.br .. Como posso fazer funcionar com qualquer domínio?
— Sameh

6

Usar

document.write(document.location.hostname)​

window.locationtem um monte de propriedades. Veja aqui uma lista deles.


5

Se você deseja uma origem de domínio completa, pode usar o seguinte:

document.location.origin

E se você deseja obter apenas o domínio, use exatamente isso:

document.location.hostname

Mas você tem outras opções, dê uma olhada nas propriedades em:

document.location

5

E essa função?

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

Isso corresponderá apenas ao nome do domínio, independentemente de ser um subdomínio ou um domínio principal


1
Eu gosto desta resposta. Mas você deve estar ciente de que, se usá-lo para fins relacionados à segurança, pode ser ignorado. Ou seja, se você quiser garantir que está no example.com, o hacker-example.com também seria igual a 'example.com'. window.location.hostname.match (/ [a-zA-Z0-9 -] * \. [a-zA-Z0-9 -] * $ /) [0] funciona.
— hiburn8

4

Se você deseja obter o nome de domínio em JavaScript, basta usar o seguinte código:

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

Se você precisar acessar o caminho da URL da página da Web para poder acessar o caminho da URL da Web, use este exemplo:

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


1

Eu sou novo em JavaScript, mas você não pode simplesmente usar: document.domain ?

Exemplo:

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

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

Resultado:

domain.com

ou

www.domain.com

Dependendo do que você usa no seu site.


0

Eu acho que deve ser tão simples quanto isto:

url.split("/")[2]


Funciona para mim. As soluções anteriores dependem do documento, localização ou objeto da janela.
— Cris

0

Combinando algumas respostas acima, o seguinte funciona muito bem para mim na destruição de 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]}`;
  }

Funciona para endereços IP com portas, por exemplo, 0.0.0.0:8000 etc, assim como domínios complexos como app.staging.example.comretornar .example.com=> permite a configuração e destruição de cookies entre domínios.


0

Se você deseja que o nome de domínio do país - por exemplo, extraia  .com   do 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;
}

Em seguida, basta usar a função para atribuir o valor a uma 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

De fato funcionou para mim, enquanto eu não poderia usar PHP

Acabei de testar que funcionou graças à abordagem mencionada acima em algumas das respostas, tão rápidas e verificadas que funcionaram


@Brandito Obrigado, bem, esse site foi hospedado em um host virtual da AWS, acredito que usando o wordpress e não sei por que estava dando problemas para fazê-lo dessa maneira ... Não tenho certeza se houve um redirecionamento incorreto ou algo que precisava fazer com as regras de reescrita do mod de back-end. Além disso, eu queria usar um ícone e um ícone da ferramenta jquery ui. Aprovado pelo cliente em primeiro lugar, é claro: '-)
— Jean Paul AKA el_vete
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.