2012-03-01 45 views
24

estoy buscando una forma elegante de obtener la URL del documento actual en Javascript.URL actual sin parámetros, hachís, http (s): //

  • La URL debe estar limpio de parámetros (? Parámetro1 = bla bla = & parámetro2)
  • La URL debe estar limpia de etiquetas de hash (#jumppoint)
  • HTTP/HTTPS se debe quitar/consolidado en http

Sé que puedo obtener la URL actual con location.href y luego usar algunas expresiones regulares para limpiarla, pero ¿hay alguna solución más limpia para deshacerse de la basura?

+0

Estoy tentado a downvote sólo para llamar a partes importantes de la url "basura"! – Douglas

+0

@Douglas Importancia es subjetiva. Es completamente plausible que en el contexto de esta función solo el anfitrión sea la parte relevante. –

+0

ptorocol puede ser ftp: también, ¿necesita considerarlo? – kirilloid

Respuesta

46

hay muchos otros parámetros que el href en window.location. Véase la referencia completa aquí: https://developer.mozilla.org/en/DOM/window.location

Lo que se busca como titular podría ser el window.location.hostname:

"el nombre de host (sin el número de puerto o cuadrado paréntesis)."

En el ejemplo URL http://[www.example.com]:80/search?q=devmo#test, el nombre de host será www.example.com.

Si también desea incluir la ruta de acceso y forzar un protocolo http: //, intente:

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

Como nota al margen, un truco ingenioso para obtener los mismos parámetros de otra URL que la ventana. ubicación es crear un ancla vacío:

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

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

Creo que también quieren la ruta. – jfriend00

+0

@ jfriend00 Sí, los documentos deberían ser suficientes para resolver las cosas, pero también los agregué para mayor claridad. – David

+1

''http: //' + window.location.hostname + window.location.pathname;' olvidó el puerto – Alex

0

This página indica que probablemente podría utilizar window.location.host para obtener la parte que está realmente interesado en que no lo he probado, sin embargo..

+8

Luego, pruébelo ... – Konerak

2

Tienes document.location objeto, por lo que:

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

Probar:

 

window.location.hostname; 
 
1

Puede utilizar estas funciones de reemplazo para eliminar el hash y buscar argumentos y normalizar https a http:

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

O, si todo lo que realmente quiere es el dominio y la ruta, sólo puede utilizar este :

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

Ninguna de las respuestas dadas abordar el hecho de que el protocolo puede ser HTTP o HTTPS como en el título PO.Para adaptarse a esta sugiero:

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

"http/https debe eliminarse/consolidarse en http" ... – David

+0

Si tiene un número de puerto en su URL, esta solución hace que se pierda el número de puerto, es decir, http: // localhost: 49346/se convierte en http: // localhost. – Kris

2

Inténtelo este fragmento:

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

Esto ya fue respondido hace mucho tiempo. Y esta respuesta es incorrecta con respecto a la pregunta, ya que todavía proporcionará https: // como el protocolo de origen si la página es https, pero debe quitar el protocolo/leerlo como http. – bardiir

+0

¿No falta el nombre de host en el código for-IE? Como 'window.location.origin = window.location.protocol +" // "+ (window.location.port? ':' + Window.location.port: '') + '/' + window.location. nombre de host; ' – Alex

+0

sí, pero no en ese orden: window.location.origin = window.location.protocol +" // "+ window.location.hostname + (window.location.port? ':' + window.location. Puerto : ''); – Zzirconium

Cuestiones relacionadas