2012-03-01 3 views
24

현재 문서의 URL을 자바 스크립트로 가져 오는 깔끔한 방법을 찾고 있습니다.매개 변수, 해시, http가없는 현재 URL : //

  • URL은 URL은
  • HTTP/HTTPS 제거 /로 통합해야 해시 태그 (#jumppoint)의 깨끗해야
  • 매개 변수 (? 매개 변수 1 = 즐 & 매개 변수 2 = BLA)의 깨끗해야 http

나는 location.href를 사용하여 현재 URL을 얻은 다음 일부 정규식을 사용하여 정리할 수 있지만 정크를 제거하기위한 더 좋고/깨끗한 솔루션이있을 수 있습니다.

+0

나는 URL을 '정크'의 중요한 부분을 호출하기위한 단지 downvote 유혹 해요! – Douglas

+0

@Douglas 중요도는 주관적입니다. 이 기능의 맥락에서 호스트 만이 관련 부분임을 전적으로 타당합니다. –

+0

ptorocol은 ftp 일 수 있습니다. 또한 고려해야합니까? – kirilloid

답변

46

window.location에는 href 이외의 많은 매개 변수가 있습니다. 여기에 전체 참조를 참조하십시오 https://developer.mozilla.org/en/DOM/window.location

당신이 선발이 window.location.hostname 수 있습니다으로 찾고있다 ". (포트 번호 또는 정사각형 괄호없이) 호스트 이름"

예제 URL http://[www.example.com]:80/search?q=devmo#test에서 호스트 이름은 www.example.com입니다. 당신은 또한 경로를 포함하고 HTTP를 강제하려면

: // 프로토콜을 시도 : 보조 노트로

'http://' + window.location.hostname + window.location.pathname; 

, 멋진 트릭을 창 아닌 다른 URL에서 동일한 매개 변수를 얻을 수 있습니다. 위치는 빈 앵커를 생성하는 것입니다.

var a = document.createElement('a'); 
a.href = 'http://www.example.com:80/search?q=devmo#test'; 

console.log('http://' + a.hostname + a.pathname); 
+1

나는 그들이 경로명을 원한다고 생각한다. – jfriend00

+0

@ jfriend00 yea, docs는 사태를 파악하기에 충분해야하지만 명확성을 위해 추가했습니다. – David

+1

'http : //'+ window.location.hostname + window.location.pathname; 포트를 잊어 버렸습니다 – Alex

0

This 페이지 당신은 아마 그러나, 당신은 내가 그것을 테스트하지 않았습니다에서 실제로 관심있는 부분을 얻기 위해 window.location.host을 사용할 수 있음을 나타냅니다.

+8

그런 다음 테스트 해주세요 ... – Konerak

2

당신이 너무 document.location 객체 :

var oLoc = document.location, 
    sUrl = oLoc.protocol + oLoc.hostname; 
    // or "http://" + oLoc.hostname 
0

보십시오 : 당신은 HTTP에 HTTPS를 해시를 제거하고 인수를 검색하고 정상화하기 위해 이러한 교체 기능을 사용할 수 있습니다

 

window.location.hostname; 
 
1

:

url = url.replace(/#[^#]*$/, "").replace(/\?[^\?]*$/, "").replace(/^https:/, "http:"); 

또는 도메인과 경로를 정말로 원한다면 다음을 사용할 수 있습니다. :

window.location.hostname + window.location.pathname 
27

없음 필요가 없습니다 프로토콜이 작전의 제목으로 HTTP 또는 HTTPS를 할 수 있다는 사실을 해결할 것을 얻었다.이를 수용하기 위해 내가 제안 :

document.location.protocol +"//"+ document.location.hostname + document.location.pathname 
+1

"http/https를 http로 제거/통합해야합니다 ..." – David

+0

URL에 포트 번호가 있으면이 솔루션으로 인해 포트 번호가 손실됩니다 (예 : http : // localhost : 49346/http : // localhost). – Kris

2

이 조각을 시도하십시오 :

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

 
url = window.location.origin + window.location.pathname; 
 
document.write('Origin url: ' + url);

+0

이것은 이미 오래 전 대답했습니다. 페이지가 https 인 경우 원래 프로토콜로 https : //를 제공하지만 프로토콜/readd를 http로 제거해야하므로 질문에 대해서는이 대답이 잘못되었습니다. – bardiir

+0

for-IE 코드에 호스트 이름이 누락되어 있지 않습니까? like 'window.location.origin = window.location.protocol + "//"(window.location.port? ':'+ window.location.port : '') + '/'+ window.location. 호스트 이름; ' – Alex

+0

예, 순서는 아닙니다 : window.location.origin = window.location.protocol + "//"+ window.location.hostname + (window.location.port?': '+ window.location. 포트 : ''); – Zzirconium