Javascript로 현재 도메인 이름 얻기 (경로 등이 아님)


246

같은 사이트에 두 개의 도메인 이름을 구매할 계획입니다. 사용되는 도메인에 따라 페이지에서 약간 다른 데이터를 제공 할 계획입니다. 내 페이지를로드하는 실제 도메인 이름을 감지하여 내용을 어떻게 변경해야하는지 알 수있는 방법이 있습니까?

나는 이런 것들을 둘러 보았지만 대부분 내가 원하는 방식으로 작동하지 않습니다.

예를 들어

document.write(document.location)

JSFiddle 그것은 반환

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

즉, 실제 경로 또는 그 무엇이든.


1
당신이하고 싶은 것을 정확히 이해하고 있는지는 잘 모르겠지만, 이것에 관해 MDN 을 살펴 봐야 합니다
MilkyWayJoe

약간의 주제이지만 두 개의 별도 도메인 이름 대신 하위 도메인을 갖는 것을 고려할 수도 있습니다. 뭔가 같은 premium.random.comfree.random.com
T.Chmelevskij

답변:


456

어때요 :

window.location.hostname

location객체는 실제로이 속성의 수 URL의 다른 부분을 언급을


55
그리고 window.location.hostname당신은 얻을하지 않으려면 port같은 ( http://localhost:3000/, window.location.host = 'localhost:3000'window.location.hostname = 'localhost'
Guilherme

6
포트가 도메인에 속하지 않기 때문에 대답이 잘못되었습니다. 그리고 window.location.host때때로 포트 등을 제공 할 것입니다.
Andrej

4
또한 서버 이름 ( '.amazingjokes.com'대신 'www.amazingjokes.com')을 반환합니다.
patrick

DNS를 전달하는 경우 다음 중 하나가 필요할 수 있습니다. window.location.ancestorOrigins
Kirill Gusyatin

126

스크립트에서 실행하십시오 : 경로 : http : // localhost : 4200 / landing? query = 1 # 2

console.log(window.location.hash)

위치는 다음 값을 갖습니다.

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
이것은 훌륭한 답변입니다!
Andrew Campbell

2
나는 몇 가지 예를 들어 답을 좋아합니다. 대단히 감사합니다.
Magno Alberto

24

호스트 이름 (예 :)에 관심이 없지만 www.beta.example.com도메인 이름 (예 example.com:)에 관심이있는 경우 유효한 호스트 이름에 적용됩니다.

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

13
잘못하면 거의 모든 국제 TLD에서 문제가 발생합니다.
tbranyen

4
@tbranyen 당신은 무엇을 말하는지 설명 할 수 있습니까? 내가 생각할 수있는 유일한 경우는과 같은 하위 도메인 amazon.co.uk입니다. 그러나 "거의 모든 국제 TLD"는 아닙니다. 사실 그것은 100 % 작동 위키 백과에있는 국가 코드
cprcrack

1
어떤 이유로 든 cprcrack 나는 더 많은 국제 (미국에) tlds에 여러 개의 점이 포함되어 있다고 생각했습니다. 수정 해 주셔서 감사합니다!
tbranyen

많은 국가가 영국과 유사하게 작동합니다. 2 차 도메인이 고정되어 있으며 3 차 도메인에서만 도메인을 등록 할 수 있습니다. 해당 국가의 목록은 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;
}

이전 버전은 전체 도메인 (하위 도메인 포함)을 가져 왔습니다. 이제 선호도에 따라 올바른 도메인을 결정합니다. 따라서 두 번째 인수가 true로 제공되면 하위 도메인이 포함되고 그렇지 않으면 '주 도메인'만 반환합니다


1
이것은 대답이어야하며, 심지어 작동하고 localhost/test.php정답 localhost입니다.
Mohammad AlBanna

당신이 아니라 현재에서는 window.location에 전달되는 URL로 작동하기 때문에 그것은 또한 가장 좋은 대답
sohtimsso1970

이를 google.co.uk위해 'co.uk'를 다시 받으면 올바르지 않습니다.
James Douglas

예. 까다로운 사업입니다. 하위 도메인도있는 경우 까다 롭습니다 (예 : test.google.co.uk). 이 원시 버전을 사용하려면 몇 가지 심각한 조정이 필요합니다 (아마도 해당 목록에 대한 특수 목록 추가).
adelineu

10

Javascript의 위치 객체에서 쉽게 얻을 수 있습니다.

예를 들어이 페이지의 URL은 다음과 같습니다.

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

그런 다음 location 객체의 다음 속성을 사용하여 정확한 도메인을 얻을 수 있습니다.

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

다음을 사용하여 전체 도메인을 만들 수 있습니다.

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

이 예에서는 http://www.stackoverflow.com

이 외에도 전체 URL과 위치 객체의 다른 속성을 가진 경로를 얻을 수 있습니다.

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

당신은 도메인 이름에 관심이있는 다음 하위 도메인을 무시하기를 원한다면 당신은의를 구문 분석해야 host하고 hostname.

다음 코드가이를 수행합니다.

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/


왜 jsFiddle 대신 jShell을 반환합니까?
Freesnöw

2
@ XanderLamkins : 그것의 iframe : jsfiddle.net/5U366 <-> fiddle.jshell.net/5U366/show
Saxoier

7

이 질문은 호스트 이름이 아닌 도메인 이름을 요구하므로 정답은

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

www.example.com 과 같은 호스트 이름에서도 작동합니다 .


1
이것은 작동하지만 domain.co.uk, domain.com.br과 같은 도메인에서는 작동하지 않습니다. 어떤 도메인에서도 작동하게하려면 어떻게해야합니까?
Sameh


5

전체 도메인 출처를 원할 경우 다음을 사용할 수 있습니다.

document.location.origin

도메인 만 얻으려면 다음을 사용하십시오.

document.location.hostname

그러나 다른 옵션이 있다면 다음의 속성을 살펴보십시오.

document.location

5

이 기능은 어떻습니까?

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

하위 도메인 또는 기본 도메인에 관계없이 도메인 이름과 만 일치합니다.


1
나는이 답변을 좋아한다. 그러나 보안 관련 목적으로 사용하는 경우 무시할 수 있습니다. 즉, example.com을 사용하려면 hacker-example.com도 'example.com'과 같습니다. window.location.hostname.match (/ [a-zA-Z0-9-] * \. [a-zA-Z0-9-] * $ /) [0] 작동합니다.
hiburn8

4

JavaScript로 도메인 이름을 얻으려면 다음 코드를 사용하십시오.

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

URL 경로를 웹 페이지로 만들어야 웹 URL 경로에 액세스하려면 다음 예제를 사용하십시오.

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


1

JavaScript를 처음 사용하지만 document.domain ?

예:

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

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

산출:

domain.com

또는

www.domain.com

귀하의 웹 사이트에서 사용하는 내용에 따라 다릅니다.


0

나는 이것이 다음과 같이 간단해야한다고 생각한다.

url.split("/")[2]


나를 위해 작동합니다. 이전 솔루션은 문서, 위치 또는 창 객체에 의존합니다.
Cris

0

위의 몇 가지 대답을 결합하면 다음은 쿠키를 파괴하는 데 정말 효과적입니다.

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

0.0.0.0:8000 등의 포트가있는 IP 주소와 => app.staging.example.comreturn 과 같은 복잡한 도메인에서 작동 .example.com하면 도메인 간 쿠키 설정 및 제거가 가능합니다.


0

국가 도메인 이름을 원할 경우 (예   : stackoverflow.com에서 .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;
}

그런 다음 함수를 사용하여 값을 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

PHP를 사용할 수 없었지만 실제로 나를 위해 일했습니다.

위의 답변 중 일부에서 위에서 언급 한 접근법 덕분에 효과가 있는지 테스트 했으므로 신속하고 검증되었습니다.


@Brandito 고마워요, 그 사이트는 AWS 가상 호스트에서 호스팅되었습니다. 워드 프레스를 사용한다고 생각하고 왜 그런 식으로 문제를 일으키는 지 모르겠습니다. 백엔드 모드 다시 작성 규칙을 사용하십시오. 또한 jquery ui 테마 도구와 아이콘을 함께 사용하고 싶었습니다. 클라이언트에 의해 첫 번째로 승인 됨 : '-)
Jean Paul AKA el_vete
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.