11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,

Je souhaiterais utiliser le mécanisme du navigateur dans un script JavaScript pour résoudre des URLs. Par exemple, si la page actuelle est "http://example.com/coincoin/", je voudrais transformer facilement "/pouet/" en "http://example.com/pouet/" ou "pouet/" en "http://example.com/coincoin/pouet/".

Il est possible de procéder ainsi :
var a  = document.createElement("a");
a.href = "/pouet/";
alert(a.href);
Mais :
- C'est du bidouillage.
- Plus gênant, ça ne marche pas avec IE (mais avec FF et Opera).

Si vous avez des idées, je suis preneur. Smiley smile
Merci d'avance.
Modifié par Eldebaran (13 Dec 2006 - 17:18)
Benjamin D.C. a écrit :
Pourquoi pas tout simplement de l'url rewriting?
Je ne comprends pas. Quel est le rapport entre l'url rewriting et la résolution d'URLs dans un script JavaScript ?
Modérateur
Salut,

Si j'ai bien compris ta question, tu peux constituer un tableau de tous les membres de l'url via la méthode split et une expression régulière, puis la recomposer suivant tes besoins via la méthode join.
Modifié par koala64 (13 Dec 2006 - 11:59)
koala64 a écrit :
Si j'ai bien compris ta question, tu peux constituer un tableau de tous les membres de l'url via la méthode split et une expression régulière, puis la recomposer suivant tes besoins via la méthode join.
Je voudrais justement éviter ce genre de solutions, puisqu'il devrait être possible d'utiliser directement le mécanisme du navigateur (le code que j'ai donné marche avec FF et Opera).

Je ne suis pas sûr de comprendre ta solution. Tu veux dire récupérer la valeur de location.href, et jouer avec elle et avec l'url que je veux résoudre ? Il y a plein de cas à gérer (par exemple "../pouet/"), et je voudrais obtenir exactement le même résultat que celui que m'aurait donné le navigateur.
Modérateur
euh... un truc dans le genre peut-être ?
function Init()
{
	var sLink = location.href,
            Test = new RegExp("[ / ]", "g"),
            sTab = sLink.substring(7),
            aTab = sTab.split(Test),
            sNewLink = "http://";
	for(var iI = 0; iI < aTab.length - 1; iI++) sNewLink += aTab[iI] + "/";
	sNewLink += "pouet/";
	alert (sNewLink);	
}
window.onload = Init;

sTab = sLink.substring(8) si tu testes en local...
Modifié par koala64 (13 Dec 2006 - 14:01)
Modérateur
PS : Faut peut-être ajouter une condition supplémentaire sur la longueur du tableau... En gros dire que si la chaîne récupérée ne se finit pas par "/", on supprime le dernier élément (nom de fichier) comme c'est la cas ici, sinon, on prend le tableau complet...
Modifié par koala64 (13 Dec 2006 - 14:12)
Eldebaran a écrit :
Je ne comprends pas. Quel est le rapport entre l'url rewriting et la résolution d'URLs dans un script JavaScript ?
Woops Smiley confused Voilà ce que c'est de lire en diagonale Smiley rolleyes
Benjamin D.C. a écrit :
Woops Smiley confused Voilà ce que c'est de lire en diagonale Smiley rolleyes
Pas de problème. Smiley smile

Merci à tous les deux pour vos réponses.
J'avais écrit une fonction de résolution d'URLs relatives en php (que j'utilise dans mon QCValidator), j'imagine que ça doit pouvoir se récupérer en js moyennant quelques petites adaptations.
QuentinC a écrit :
J'avais écrit une fonction de résolution d'URLs relatives en php (que j'utilise dans mon QCValidator), j'imagine que ça doit pouvoir se récupérer en js moyennant quelques petites adaptations.
En fait, je cherchais plutôt une solution intégrée au navigateur, qui serait nettement plus robuste (imaginons que l'utilisateur ait ajouté une balise <base> sur la page par exemple...). A mon avis, ça doit forcément être possible. Ce ci dit, merci quand même. Smiley smile
Modifié par Eldebaran (13 Dec 2006 - 20:40)
QuentinC a écrit :
C'est assez peu probable, <base> est quand même assez marginal.
C'est juste un exemple...

Bien sûr qu'il est tout à fait faisable d'écrire ce genre de scripts, mais pour qu'il soit vraiment complet, c'est plus complexe qu'il n'y paraît. Ce qui est d'autant plus dommage que le script s'exécute sur un environnement qui a toutes les informations nécessaires pour faire cette opération. L'exemple de la création d'un lien que j'ai donné dans mon premier message le prouve, si c'était nécessaire.
Modifié par Eldebaran (13 Dec 2006 - 22:04)
En même temps je ne connnais aucune fonction javascript genre solveURL qui ferait ça.

Sur IE, tu peux peut-être essayer de le faire avec une image.
QuentinC a écrit :
Sur IE, tu peux peut-être essayer de le faire avec une image.
Bien vu, ça marche !

Voilà donc une fonction testée sous IE 5+, FF 1.5 et Opera 9 :
function solveURL(url) {
   var img = document.createElement("img");
   img.src = url;
   return img.src;
}
Merci Quentin. Smiley smile
Modifié par Eldebaran (14 Dec 2006 - 09:59)