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.

Freesnöw
fonte
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

Gareth
fonte
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"
Sunil shakya
fonte
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);
}
cprcrack
fonte
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'

adelineu
fonte
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"
Iman Sedighi
fonte
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/

dmck
fonte
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 .

Ethan
fonte
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.

Dancrumb
fonte
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
Ricardo França
fonte
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

unixdebian11
fonte
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);
ujjal
fonte
2

para o meu caso, a melhor correspondência é window.location.origin

Pavel Poberezhnyi
fonte
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.

UnluckyLuke
fonte
0

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

url.split("/")[2]

Alexandru Mihalcea
fonte
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.

Micheal J. Roberts
fonte
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();
Nadav
fonte
-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

Jean Paul AKA el_vete
fonte
@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