@Randomblue ¿Qué hay de eso? Lo conseguirás about://. Sin embargo, tengo curiosidad por saber, ¿cuál sería el caso de uso about:blank? No estoy seguro de si algún navegador inyecta recursos de complementos about:blank, pero parece que ese podría ser el único caso de uso.
Shef
3
Esto no funciona en absoluto si tiene una cadena de URL, ¿verdad? (es decir, necesitas estar enlocation esto para que funcione)
Método 2 (antigua forma): utilice el analizador incorporado del navegador en el DOM
Use esto si lo necesita para trabajar también en navegadores antiguos.
// Create an anchor element (note: no need to append this element to the document)const url = document.createElement('a');// Set href to any path
url.setAttribute('href','http://example.com:12345/blog/foo/bar?startIndex=1&pageSize=10');
¡Eso es!
El analizador incorporado del navegador ya ha hecho su trabajo. Ahora puede tomar las partes que necesita (tenga en cuenta que esto funciona para los dos métodos anteriores):
// Get any piece of the url you're interested in
url.hostname;// 'example.com'
url.port;// 12345
url.search;// '?startIndex=1&pageSize=10'
url.pathname;// '/blog/foo/bar'
url.protocol;// 'http:'
Bonus: Parámetros de búsqueda
Es probable que también desee separar los parámetros de URL de búsqueda, ya que '? StartIndex = 1 & pageSize = 10' no es demasiado utilizable por sí solo.
Si usó el Método 1 (API de URL) anterior, simplemente use los captadores searchParams:
link.protocol me da un "http:" si inspecciono un anker con "google.com" :-(var link = document.createElement('a'); link.setAttribute('href', 'google.com'); console.log(link.protocol)
eXe
¿Estás haciendo eso en una httppágina quizás? Si no se especifica, 'heredará' de la ubicación actual
Stijn de Witt,
44
Esta es una respuesta fantástica y debería obtener más votos, porque esta respuesta no se limita solo a la ubicación actual , sino que funciona para cualquier url , y porque esta respuesta utiliza el analizador incorporado del navegador en lugar de construir uno nosotros mismos (que no podemos Espero hacerlo tan bien o tan rápido!
Stijn de Witt
¡Gracias por este ingenioso truco! Me gustaría agregar una cosa: hay ambas hosty hostname. El primero incluye el puerto (por ejemplo localhost:3000), mientras que el segundo es solo el nombre del host (por ejemplo localhost).
codener
Esto funciona bien en caso de URL absoluta. Falla en caso de URL relativa y navegador cruzado. ¿Alguna sugerencia?
Gururaj
133
Por alguna razón, todas las respuestas son exageradas. Esto es todo lo que se necesita:
Para su información, estoy seguro de que esto será genial en el futuro cuando todos los navegadores populares lo hayan implementado, sin embargo , este no es el caso actualmente: developer.mozilla.org/en-US/docs/Web/API/… At Al momento de escribir, solo las versiones recientes de los navegadores Firefox y WebKit admiten la propiedad de origen según mi investigación.
Zac Seth
2
Solo para completar: la ubicación se define en HTML5 e implementa la URLUtilsinterfaz que se define en WHATWG e incluye el originatributo.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
55
Hola desde 2015 ... desafortunadamente, URLUtils todavía no se implementa correctamente en todos los navegadores, de acuerdo con esta tabla de compatibilidad en MDN. Sin embargo, parece que la propiedad de origen es ligeramente mejor compatible que en 2013, todavía no es apta para la producción, ya que no está implementada correctamente en Safari. Lo siento chicos :(
totallyNotLizards
Actualización: Todavía no es compatible con muchos navegadores (safari también) :( :(
Ahmad hamza
Tampoco funciona en IE, devuelve "indefinido".
Siddhartha Chowdhury
53
Como ya se mencionó, todavía no se admite por completo, window.location.originpero en lugar de usarlo o crear una nueva variable para usar, prefiero verificarlo y si no está configurado para configurarlo.
Al agregar una respuesta a una pregunta anterior con respuestas existentes, es útil explicar qué información nueva aporta su respuesta y reconocer si el paso del tiempo impacta la respuesta.
Jason Aller
8
De hecho, window.location.origin funciona bien en los navegadores que siguen los estándares, pero adivina qué. IE no está siguiendo los estándares.
Por eso, esto es lo que funcionó para mí en IE, FireFox y Chrome:
var full = location.protocol+'//'+location.hostname+(location.port ?':'+location.port:'');
pero para posibles mejoras futuras que podrían causar conflictos, especifiqué la referencia de "ventana" antes del objeto de "ubicación".
var full = window.location.protocol+'//'+window.location.hostname+(window.location.port ?':'+window.location.port:'');
considera explicar tu respuesta. No asuma que el OP puede comprender la importancia de las diferentes partes de su código.
ADyson
3
Intente usar una expresión regular (Regex), que será bastante útil cuando desee validar / extraer cosas o incluso hacer un análisis simple en javascript.
La expresión regular es:
/([a-zA-Z]+):\/\/([\-\w\.]+)(?:\:(\d{0,5}))?/
Demostración:
function breakURL(url){
matches =/([a-zA-Z]+):\/\/([\-\w\.]+)(?:\:(\d{0,5}))?/.exec(url);
foo =newArray();if(matches){for( i =1; i < matches.length ; i++){ foo.push(matches[i]);}}return foo
}
url ="https://www.google.co.uk:55699/search?q=http%3A%2F%2F&oq=http%3A%2F%2F&aqs=chrome..69i57j69i60l3j69i65l2.2342j0j4&sourceid=chrome&ie=UTF-8"
breakURL(url);// [https, www.google.co.uk, 55699]
breakURL();// []
breakURL("asf");// []
breakURL("asd://");// []
breakURL("asd://a");// [asd, a, undefined]
"Un esquema de URL RFC 3986 válido debe consistir en" una letra y seguido de cualquier combinación de letras, dígitos, más ("+"), punto (".") O guión ("-"). "- stackoverflow. com / a / 9142331/188833 (Aquí hay una urna: ietf: rfc: 3897 (URI) / urn: ietf: rfc: 3897 (IRI) regex para el esquema: parte de una URI / IRI en Python: github.com/dgerber /rfc3987/blob/master/rfc3987.py#L147 )
Wes Turner
2
Respuesta simple que funciona para todos los navegadores:
/**
* Get the current URL from `window` context object.
* Will return the fully qualified URL if neccessary:
* getCurrentBaseURL(true, false) // `http://localhost/` - `https://localhost:3000/`
* getCurrentBaseURL(true, true) // `http://www.example.com` - `https://www.example.com:8080`
* getCurrentBaseURL(false, true) // `www.example.com` - `localhost:3000`
*
* @param {boolean} [includeProtocol=true]
* @param {boolean} [removeTrailingSlash=false]
* @returns {string} The current base URL.
*/exportconst getCurrentBaseURL =(includeProtocol =true, removeTrailingSlash =false)=>{if(!window ||!window.location ||!window.location.hostname ||!window.location.protocol){
console.error(`The getCurrentBaseURL function must be called from a context in which window object exists.Yet, window is ${window}`,[window, window.location, window.location.hostname, window.location.protocol],)thrownewTypeError('Whole or part of window is not defined.')}const URL =`${includeProtocol ?`${window.location.protocol}//` : ''}${window.location.hostname}${
window.location.port ?`:${window.location.port}`:''}${removeTrailingSlash ?'':'/'}`// console.log(`The URL is ${URL}`)return URL
}
Respuestas:
primero obtenga la dirección actual
Entonces solo analiza esa cadena
tu url es:
Espero que esto ayude
fuente
location
objeto no está disponible (¡fuera del navegador!)location
) pero puede usarse para cualquier url. Compruébalo, está ordenado.window.location.href.split('/').slice(0, 3).join('/')
fuente
about://
. Sin embargo, tengo curiosidad por saber, ¿cuál sería el caso de usoabout:blank
? No estoy seguro de si algún navegador inyecta recursos de complementosabout:blank
, pero parece que ese podría ser el único caso de uso.location
esto para que funcione)location.host
lugar delocation.hostname
+location.port
?Ninguna de estas respuestas parece abordar completamente la pregunta, que requiere una url arbitraria, no específicamente la url de la página actual.
Método 1: utilice la API de URL (advertencia: no es compatible con IE11)
Puede usar la API de URL (no es compatible con IE11, pero está disponible en cualquier otro lugar ).
Esto también facilita el acceso a los parámetros de búsqueda . Otra ventaja: se puede usar en un Web Worker, ya que no depende del DOM.
Método 2 (antigua forma): utilice el analizador incorporado del navegador en el DOM
Use esto si lo necesita para trabajar también en navegadores antiguos.
¡Eso es!
El analizador incorporado del navegador ya ha hecho su trabajo. Ahora puede tomar las partes que necesita (tenga en cuenta que esto funciona para los dos métodos anteriores):
Bonus: Parámetros de búsqueda
Es probable que también desee separar los parámetros de URL de búsqueda, ya que '? StartIndex = 1 & pageSize = 10' no es demasiado utilizable por sí solo.
Si usó el Método 1 (API de URL) anterior, simplemente use los captadores searchParams:
O para obtener todos los parámetros:
Si usó el Método 2 (a la antigua usanza), puede usar algo como esto:
fuente
var link = document.createElement('a'); link.setAttribute('href', 'google.com'); console.log(link.protocol)
http
página quizás? Si no se especifica, 'heredará' de la ubicación actualhost
yhostname
. El primero incluye el puerto (por ejemplolocalhost:3000
), mientras que el segundo es solo el nombre del host (por ejemplolocalhost
).Por alguna razón, todas las respuestas son exageradas. Esto es todo lo que se necesita:
Se pueden encontrar más detalles aquí: https://developer.mozilla.org/en-US/docs/Web/API/window.location#Properties
fuente
URLUtils
interfaz que se define en WHATWG e incluye elorigin
atributo.Como ya se mencionó, todavía no se admite por completo,
window.location.origin
pero en lugar de usarlo o crear una nueva variable para usar, prefiero verificarlo y si no está configurado para configurarlo.Por ejemplo;
De hecho, escribí sobre esto hace unos meses. Una solución para window.location.origin
fuente
window.location.origin
que existe. Gracias. ^^anfitrión
devoluciones
localhost:2679
nombre de host
devoluciones
localhost
fuente
localhost/
lugar delocalhost:3000
.window.location.origin
será suficiente para obtener lo mismo.fuente
Esto significa que si desea obtener solo la parte HTTP / HTTPS, puede hacer algo como esto:
Para el dominio puedes usar:
Para el puerto puedes usar:
Tenga en cuenta que el puerto será una cadena vacía si no está visible en la URL. Por ejemplo:
Si necesita mostrar 80/443 cuando no tiene uso de puerto
fuente
¿Por qué no usar:
fuente
De hecho, window.location.origin funciona bien en los navegadores que siguen los estándares, pero adivina qué. IE no está siguiendo los estándares.
Por eso, esto es lo que funcionó para mí en IE, FireFox y Chrome:
pero para posibles mejoras futuras que podrían causar conflictos, especifiqué la referencia de "ventana" antes del objeto de "ubicación".
fuente
Aquí está la solución que estoy usando:
EDITAR:
Para agregar compatibilidad entre navegadores, use lo siguiente:
fuente
window.location.host
puede que no sea el mejor navegadorfuente
fuente
Intente usar una expresión regular (Regex), que será bastante útil cuando desee validar / extraer cosas o incluso hacer un análisis simple en javascript.
La expresión regular es:
Demostración:
Ahora puedes hacer la validación también.
fuente
Respuesta simple que funciona para todos los navegadores:
fuente
Estilo ES6 con parámetros configurables.
fuente
window.location.protocol + '//' + window.location.host
fuente