La solution proposée et acceptée ne prend pas en charge les URL relatives au serveur et ne fonctionne pas sur les URL absolues. Si mon URL relative est /sites/folder1, cela ne fonctionnera pas, par exemple.
Voici une autre fonction qui prend en charge les URL complètes, relatives au serveur ou relatives ainsi que ../ pour un niveau supérieur. Elle n'est pas parfaite mais couvre un grand nombre d'options. Utilisez-la lorsque votre URL de base n'est pas l'URL de la page en cours, sinon il existe de meilleures alternatives.
function relativeToAbsolute(base, relative) {
//make sure base ends with /
if (base[base.length - 1] != '/')
base += '/';
//base: https://server/relative/subfolder/
//url: https://server
let url = base.substr(0, base.indexOf('/', base.indexOf('//') + 2));
//baseServerRelative: /relative/subfolder/
let baseServerRelative = base.substr(base.indexOf('/', base.indexOf('//') + 2));
if (relative.indexOf('/') === 0)//relative is server relative
url += relative;
else if (relative.indexOf("://") > 0)//relative is a full url, ignore base.
url = relative;
else {
while (relative.indexOf('../') === 0) {
//remove ../ from relative
relative = relative.substring(3);
//remove one part from baseServerRelative. /relative/subfolder/ -> /relative/
if (baseServerRelative !== '/') {
let lastPartIndex = baseServerRelative.lastIndexOf('/', baseServerRelative.length - 2);
baseServerRelative = baseServerRelative.substring(0, lastPartIndex + 1);
}
}
url += baseServerRelative + relative;//relative is a relative to base.
}
return url;
}
J'espère que cela vous aidera. Il était vraiment frustrant de ne pas disposer de cet utilitaire de base en JavaScript.