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


246

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

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

예를 들어

document.write(document.location)

에 JSFiddle 그것은 반환

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

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


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

약간의 주제이지만 두 개의 별도 도메인 이름 대신 하위 도메인을 갖는 것을 고려할 수도 있습니다. 뭔가 같은 premium.random.com과free.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.