La résolution des URL relatives en JavaScript
-
30-09-2019 - |
Question
Je construis une bibliothèque JS qui a besoin de regarder la forme [action] et un [href] les valeurs et les résoudre dans les URL absolues.
Par exemple, je suis sur http: // a / b / c / d; p q et rencontrer une valeur href de « ../g » (en supposant qu'il n'y a pas l'élément
Y at-il une bibliothèque JS qui fait cela déjà? Je dois le croire.
Pour plus d'informations sur ce qui est nécessaire, les spécifications: http://tools.ietf.org/html/rfc3986#section-5.4
La solution
Il se trouve que l'attribut .href
d'un élément A (non .getAttribute('href')
, mais .href
) renvoie l'URL résolue (absolue).
Autres conseils
Dans les navigateurs modernes, le constructeur en construction URL poignées ceci:
u = (new URL("?newSearch",
"http://a.example/with/a/long/path.file?search#fragment")).href
(rendement http://a.example/with/a/long/path.file?newSearch
)
Si vous voulez que la base soit par rapport au document en cours, vous pouvez le faire explicitement:
u = (new URL("?newSearch", document.location)).href
L'objet URL
vous donne également accès à tous les composants d'URL (protocole, hôte, le chemin, la recherche, hachage, etc.).
Nice solution pure JS qui fonctionne sans DOM: https://gist.github.com/1088850 (fonctionne partout, mais particulièrement utile pour le côté serveur JS).