Risoluzione URL relativi a JavaScript
-
30-09-2019 - |
Domanda
Sto costruendo una libreria JS, che ha un requisito di guardare forma [azione] e un [href] valori e risolverli in URL assoluti.
Per esempio, io sono su http: // a / b / c / d; p q e di incontro un valore href di "../g" (scontato non c'è nessuna base> elemento <). L'assoluto risultante sarebbe: http: //. A / b / g
C'è una libreria JS che fa questo già? Dovrei credere così.
Per ulteriori informazioni su ciò che è necessario, le specifiche: http://tools.ietf.org/html/rfc3986#section-5.4
Soluzione
Si scopre che l'attributo .href
di un elemento A (non .getAttribute('href')
, ma .href
) restituisce l'URL risolto (assoluto).
Altri suggerimenti
Nel browser moderni, il built-in URL maniglie costruttore in questo modo:
u = (new URL("?newSearch",
"http://a.example/with/a/long/path.file?search#fragment")).href
(rendimenti http://a.example/with/a/long/path.file?newSearch
)
Se si desidera che la base per essere relativo al documento corrente, è possibile farlo in modo esplicito:
u = (new URL("?newSearch", document.location)).href
L'oggetto URL
dà anche accesso a tutti i componenti URL (protocollo, host, il percorso, di ricerca, di hash, ecc.).
soluzione JS pura Nizza che funziona senza DOM: https://gist.github.com/1088850 (funziona in tutto il mondo, ma particolarmente utile per lato server JS).