11528 sujets

JavaScript, DOM et API Web HTML5

Pages :
(reprise du message précédent)

Smiley sweatdrop

A vrai dire le test que tu as fait ne correspond a aucune des deux solutions que je t'ai donnée.

Celles que j'ai decrites plus haut correspondrait plus aux deux fonctions dans cet exemple :

<script>
function evalLink1()
{
	if(document.getElementById('monLien').href.match(new RegExp("javascript:.*"))){
		eval(document.getElementById('monLien').href);
	} else {
		window.location.href = document.getElementById('monLien').href;
	}
}

function evalLink2()
{
	window.location.href = document.getElementById('monLien').href;
}
</script>

<a id="monLien" href="http://www.google.fr/">mon lien vers google</a>

<a href="javascript:evalLink1()">evaluation d'url méthode 1</a>
<a href="javascript:evalLink2()">evaluation d'url méthode 2</a>


Et là... pas d'erreurs Smiley cligne
@skywalk3r : ta solution est pas mal, mais ça reste de la bidouille.

- On est obligé d'émuler le parsing du href à la place du navigateur, ce qui signifie que l'on risque d'oublier des cas (qui nous dit que le location.href va marcher avec tous les protocoles ?).
- Les gestionnaires d'événements attachés au lien ne seront pas exécutés.
- De façon plus générale, on risque de ne pas avoir exactement le même comportement que si l'utilisateur avait cliqué sur le lien.

Mais bon, si c'est la seule solution, pourquoi pas.
Gilles a écrit :
Pour un élément quelconque, il me semble qu'il faut le préciser.

Yep, mais pour un élément quelconque, l'utilisateur ne pourra de toute façon pas prendre le focus donc on ne pourra pas le rendre accessible au clavier. Smiley smile
a écrit :
@skywalk3r : ta solution est pas mal, mais ça reste de la bidouille.


Ca c'est clair Smiley lol j'ai été le premier surpris de voir que ça fonctionne... et sur beaucoup de navigateur de surcroit.

Le besoin étant à mon sens aussi inhabituel que la solution proposée mais je n'en vois pas d'autre etant donné qu'on ne peut pas déclancher l'évenement click sur le lien.

a écrit :
Les gestionnaires d'événements attachés au lien ne seront pas exécutés.


Un lien simple qui n'a pas subit d'intervention chirurgicale au javascript c'est l'appel d'une url ou d'un javascript avec "javascript:". A priori si l'on veut emuler le clic sur un lien, on le fait en javascript et on sait donc quels événements on lui a attaché donc on est en mesure de lancer également les scripts executés sur ces évenements...

Le comportement du window.location.href n'est finalement pas si etonnant que ça. Il est le reflet de la barre d'adresse. D'ailleurs un test tout simple... si on ecrit dans la barre d'adresse du navigateur
javascript:alert('coucou')
et bien le javascript est executé...
Modifié par skywalk3r (29 Feb 2008 - 13:33)
skywalk3r a écrit :
Un lien simple qui n'a pas subit d'intervention chirurgicale au javascript c'est l'appel d'une url ou d'un javascript avec "javascript:". A priori si l'on veut emuler le clic sur un lien, on le fait en javascript et on sait donc quels événements on lui a attaché donc on est en mesure de lancer également les scripts executés sur ces évenements...

Ben non, pas du tout. Smiley smile

En général, notre code JS n'est pas tout d'un bloc, et on n'a pas accès aux gestionnaires d'événements ajoutés par d'autres parties du code (d'autant plus si on fait l'appel depuis du code Flex comme ça a l'air d'être le cas ici). Et même si tu connais les gestionnaires d'événements, je te souhaite bon courage pour simuler la création de l'événement avec toutes ses propriétés (avec les différences entre IE et les autres navigateurs, sinon ce n'est pas drole), plus les comportements comme le bouillonnement et autres annulation du comportement par défaut.

Bref, on se retrouve à réécrire ce qui existe déjà dans le navigateur, en l'occurrence les événements du DOM.

Ceci dit, je suis bien d'accord sur le fait que ça peut être une solution de repli dans ce cas particulier.
skywalk3r a écrit :
Le comportement du window.location.href n'est finalement pas si etonnant que ça. Il est le reflet de la barre d'adresse. D'ailleurs un test tout simple... si on ecrit dans la barre d'adresse du navigateur
javascript:alert('coucou')
et bien le javascript est executé...

Oui, c'est une fonctionnalité très utile pour tester rapidement du code JS. Smiley smile
Modifié par Julien Royer (29 Feb 2008 - 13:43)
Julien Royer a écrit :

En général, notre code JS n'est pas tout d'un bloc, et on n'a pas accès aux gestionnaires d'événements ajoutés par d'autres parties du code (d'autant plus si on fait l'appel depuis du code Flex comme ça a l'air d'être le cas ici). Et même si tu connais les gestionnaires d'événements, je te souhaite bon courage pour simuler la création de l'événement avec toutes ses propriétés (avec les différences entre IE et les autres navigateurs, sinon ce n'est pas drole), plus les comportements comme le bouillonnement et autres annulation du comportement par défaut.


Ouais... bien d'accord finalement Smiley lol ce qui tend à dire que le problème n'est peut -être pas envisagé sous le bon angle mais ça n'est pas vraiment possible d'aller plus loin dans la compréhension vu les éléments fournis.

une solution plus simple :

"Veuillez cliquer sur le lien... SVP"
Et sinon t'as essayé d'être moins arrogant philippelemesle ?
Ca va peut etre aider les autres à résoudre ton pb.. Smiley rolleyes


ami des bonnes relations
merci lolo pour cette intervention pleine de pertinence ...
ça a bien fait avancer mon problème.

certaine réponse n'encourage vraiment pas à chercher de l'aide.

on est très loin de l'esprit d'un forum d'entraide.
@lolo-75 : le ton de ton message est déplacé, surtout pour un premier message sur le forum. Le but est d'être constructif. Smiley cligne

philippelemesle a écrit :
certaine réponse n'encourage vraiment pas à chercher de l'aide.

Pour ma part j'avais plus tendance à penser qu'il fallait du courage pour apporter de l'aide que pour en chercher, non ?

philippelemesle a écrit :
on est très loin de l'esprit d'un forum d'entraide.

Plusieurs personnes ont essayé de t'aider à résoudre ton problème, merci de ne pas l'oublier. Smiley smile
Modifié par Julien Royer (18 Mar 2008 - 14:04)
Julien,

je n'oublie pas ...

je remercie chaleureusement les personnes qui ont tenté de m'aider Smiley biggrin ...

Tout ne m'a pas été utile ... mais m'a permis de faire avancer ma problématique ...
même si cela a été parfois en me prouvant qu'il n'était pas possible de faire quelque choise ...

je vous fais un petit retour d'expérience :

- au final, j'ai contourné mon problème - en récupérant l'url au chargement de la page qui est contenue dans une iframe
- il faut se méfier des comportements des iframes quand on essaye de dialoguer sur des domaines différents

merci encore pour votre attention, et je tiens encore à remercier les auteurs de post ayant tenté de voler à mon secours

bonne journée

philippe
Pages :