location.host와 location.hostname 및 크로스 브라우저 호환성?


365

이 중 어느 것이 사용자 에이전트가 올바른 도메인을 통해 액세스하는지 확인하는 것보다 가장 효과적인 방법입니다.

웹 브라우저를 사용하여 도메인에 액세스하는 경우 js를 위반하는 경향이있는 작은 js 기반 'top bar'스타일 경고를 표시하고 싶습니다.

우리는 다음을 사용하려고 생각했습니다.

var r = /.*domain\.com$/;
if (r.test(location.hostname)) {
    // showMessage ...
}

그것은 우리가 사용하는 모든 하위 도메인을 처리합니다.

어떤 호스트 또는 호스트 이름을 사용해야합니까?

Firefox 5 및 Chrome 12에서 :

console.log(location.host);
console.log(location.hostname);

.. 둘 다 동일하게 표시됩니다.

포트가 실제로 주소 표시 줄에 없기 때문에입니까?

W3Schools 는 호스트에 포트가 있다고 말합니다.

location.host/hostname의 유효성을 검사해야합니까, 아니면 IE6 + 및 다른 모든 것에서도 확실 할 수 있습니까?


6
한 가지 주목할 점은 Chrome에는 MSIE와 Firefox가없는 location.origin이 있다는 것입니다. developer.mozilla.org/En/Window.location - msdn.microsoft.com/en-us/library/ms952653.aspx
Keyo


답변:


1063

대화식 링크 해부

작은 메모로 : 대화식 링크 해부

-

간단히 말해서 (의 위치를 ​​가정 http://example.org:8888/foo/bar#bang) :

  • hostname 너에게 준다 example.org
  • host 너에게 준다 example.org:8888

87
그림은 천 단어의 가치가 있습니다.
Jack Giffin

4
@lolzerywowzery ... 그러나 그림을 설명하는 데 필요한 천 단어 만
Agi Hammerthief

1
en.wikipedia.org/wiki/… 에 따르면 , 포트는 호스트의 일부로 간주되어서는 안됩니다 (그러나 권한의 일부입니다).
Alec

@Alec 이것은 흥미로운 기술 노트입니다. Wikipedia 인용을 통해 드릴 다운 하면 RFC 3986에 따르면 "권한" 이 호스트 이름 , 및 포트를 연결 하는 용어 여야 함을 알 수 있습니다: . location.hostRFC를 읽거나 언급 할 사람이 없었기 때문에 오늘 토론의 이름이 아직 얼마 남지 않았 는지 궁금합니다 .
JamesTheAwesomeDude

간단한 해결책에 감사드립니다
Tarun Nagpal

70

지정된 포트 번호가 있으면 호스트에 포트 번호 만 포함됩니다. URL에 포트 번호가 없으면 호스트 이름과 동일하게 반환됩니다. 포트 번호 일치 여부를 선택하십시오. 자세한 내용은 https://developer.mozilla.org/en/window.location 을 참조 하십시오 .

호스트 이름을 사이트 이름으로 가져 오기를 원한다고 가정합니다.


33

사용을 주장하는 경우 window.location.origin 코드를 읽기 전에 코드 위에 넣을 수 있습니다.origin

if (!window.location.origin) {
  window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');
}

해결책

추신 : 기록을 위해, 그것은 실제로 최초의 질문이었습니다. 이미 편집되었습니다 :)


5
그러나 .... OP window.location.origin는 그들의 질문에 언급하지 않았습니다 . 그들의 질문은 실제로 그렇지 않은 것들에 관한 것이 었습니다window.location.origin .
Winderps

1
window.location.origin에 브라우저 호환성 문제가 있다는 점도 주목할 가치가 있습니다. developer.mozilla.org/en-US/docs/Web/API/Window/…
Scott

10

귀하의 주요 질문에 대한 답변이 위에 있습니다. 방금 사용중인 정규식에 버그가 있음을 지적하고 싶었습니다. 또한 foo-domain.com하위 도메인이 아닌 경우 에도 성공합니다.domain.com

당신이 정말로 원하는 것은 이것입니다 :

/(^|\.)domain\.com$/


0

Chrome 브라우저에는 위치에 대한 출처 속성이 있습니다. 아래 스크린 샷과 같이 프로토콜에서 포트 번호까지의 전체 도메인을 제공합니다. 크롬 개발자 도구

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.