La resolución de direcciones URL relativas en JavaScript
-
30-09-2019 - |
Pregunta
Estoy construyendo una biblioteca de JS que tiene un requisito de ver la forma [acción] ya [href] valores y resolverlas en las direcciones URL absolutas.
Por ejemplo, Estoy en http: // a / b / c / d; p q y encontrar un valor href de "../g" (suponer que no hay> elemento de base <). La absoluta resultante sería: http:. // a / b / g
¿Hay una biblioteca de JS que hace esto ya? Tendría que creerlo.
Para obtener más información sobre lo que se necesita, la especificación: http://tools.ietf.org/html/rfc3986#section-5.4
Solución
Resulta que el atributo .href
de un elemento A (no .getAttribute('href')
, pero .href
) devuelve el URL resuelto (absoluta).
Otros consejos
En los navegadores modernos, la incorporada en el URL asas constructor esto:
u = (new URL("?newSearch",
"http://a.example/with/a/long/path.file?search#fragment")).href
(rendimientos http://a.example/with/a/long/path.file?newSearch
)
Si desea que la base de que es relativa al documento actual, puede hacerlo de forma explícita:
u = (new URL("?newSearch", document.location)).href
El objeto URL
también le da acceso a todos los componentes de URL (protocolo, host, ruta, de búsqueda, de hash, etc.).
Niza solución JS pura que funciona sin DOM: https://gist.github.com/1088850 (funciona en todas partes, pero especialmente útil para el lado del servidor JS).