11550 sujets

JavaScript, DOM et API Web HTML5

Bonjour

En xhtml strict, FF et javascript, j'ouvre une fenêtre pop-up, par window.open, Pages2.xhtml pour y afficher des informations provenant d'une page Page1.xhtml. Dans page2, il n'y a qu'un <div> qui recevra les informations par l'intermédiaire d'un document.getElementById("MonDiv").innerHTML. Cet affichage ne se passe bien que si avant le innerHTML il y a un alert("message"). Je suppose donc que alert permet le rafraichissement ou l'initialisation de ma pop-up. Quelqu'un en sait-il plus sur cec sujet ?
Merci par avance
Modifié par coucou (25 Nov 2006 - 19:09)
Salut,

Si je comprends bien, le contenu de ta poup est totalement rempli en Javascript ? Tu n'auras pas une solution un peu plus propre à mettre en oeuvre ?

Quant à ton problème, est-ce que tu as une page qui l'illustre ? Ou au moins du code plus précis à nous montrer ?

P.S. : Qu'est-ce que tu appelles du "xhtml strict, FF et javascript" ?
Bonjour
Merci pour cette première réponse.
- Tout d'abord xhtml strict : le doctype est approprié et je le sers comme du xhtml et non du text/html
- faire plus "propre" ? si quelqu'un a une autre idée que celle à laquelle j'ai pensé, je veux bien. Mais parfois, et c'est la cas, on ne peut guère faire autrement. En effet, le contenu du pop-up va dépendre de l'action de l'utilisateur (du texte qu'il va taper dans les champs d'un formulaire). Le pop-up n'est ici qu'un moyen de vérifier la frappe et de confirmer. Bien sur on pourrait afficher la même chose dans un div de la page principale, mais cela surchargerait cette dernière.
- ensuite un peu de code. Je résume et j'enlève ce qui peut gêner

<form id="formulaire1" action=' ' enctype='text/plain' method='post' onsubmit="return valider();">
<p>

<input type ="text" size="20" name="nom" />
<br />Adresse
<input type ="text" size="30" name="adresse" />
<br />Telephone <input type ="text" size="15" name="telephone" />
<br /<input type ="button" value="affichage" onclick="affichage();" />
<input type ="submit" value="envoyer"  />
</p>
</form>



puis un peu de javascript




function affichage()
{
	var fen=window.open('affich.xhtml','NouvelleFenetre','resizable=yes,toolbar=no,status=no,width=300,height=200');

	message="<ul>";
	message+="<li>Nom"+document.forms["formulaire1"].nom.value+"</li>";
	message+="<li>Adresse"+document.forms["formulaire1"].adresse.value+"</li>";
	message+="<li>"+unescape("T%E9l%E9phone")+document.forms["formulaire1"].telephone.value+"</li>";
	message+="</ul>";

//   	alert("coucou");
	fen.document.getElementById("affich").innerHTML = message;

}


quant à la page affich.xhtml elle ne contient pas grand chose si ce n'est ce <div id="affich"></div> qui va recevoir l'information.

Remarque : les événements intrinsèques sont en réalité associés aux éléments dans le javascript. Je les ai ramenés là uniquement pour l'exemple.
Bonjour.
Juste une idée, en passant... Il me semble que la commande focus() résoud bien des problèmes...


fen.focus();


Avant ?? ou après ?? le innerHTML

ça vaut ce que ça vaut...
Non. ça marche pas.

Autre idée...


var fen;             // Déclarée globale
var n = 0;         // pour bricoler un watchdog (ouaf)

function affichage()
{
fen=window.open('affich.xhtml','NouvelleFenetre','resizable=yes,toolbar=no,status=no,width=300,height=200');
	message="<ul>";
message+="<li>Nom"+document.forms["formulaire1"].nom.value+"</li>";
message+="<li>Adresse"+document.forms["formulaire1"].adresse.value+"</li>";
message+="<li>"+unescape("T%E9l%E9phone")+document.forms["formulaire1"].telephone.value+"</li>";
	message+="</ul>";
	plugMess(message);
}

function plugMess(message)
{
	fen.focus();
	if (!fen.document.getElementById("affich"))
	{
               // patience...
		n +=1;
                // içi placer une trappe de secours pour éviter un bouclage infini

                // programmer une relance de la fonction dans 1 milliseconde
                // court pour l'humain, mais long pour la machine
		var timer = setTimeout("plugMess(message)", 1); // Repassez plus tard
	}
	else
	{
                // Yesss !!!
		fen.document.getElementById("affich").innerHTML = message;
		alert(n); // pour voir...
	}
}


J'ai fait une maquette qui fonctionne sous firefox 1.5

Si ça peux vous aider...


Eldebaran a écrit :

Si je comprends bien, le contenu de ta poup est totalement rempli en Javascript ? Tu n'auras pas une solution un peu plus propre à mettre en oeuvre ?

C'est vrai, ça. Pourquoi pas php ?
Modifié par GeorgesM (25 Nov 2006 - 18:28)
Bonsoir
Merci à Georges. Tout est en ordre désormais. C'est vrai qu'avec un "timer", la fenêtre prend son temps pour recevoir l'information. (j'avais déjà essayé le fen.focus() qui effectivement ne donne rien). Smiley cligne
P.S. Je ne sais pas comment mettre RESOLU sur ce sujet
Le temps que l'alert s'affiche, ça permet à ta popup de finir son chargement.
Sans l'alert, tu tentes donc une modification de la popup avant qu'elle n'ait été complètement préparée.

Il faut donc utiliser setTimeout pour retarder la mise à jour de ta popup.
Administrateur
Résolu> en éditant le titre à la main et pour cela en éditant le 1er message du Sujet. Ca et bien d'autres choses figurent dans l'Aide Smiley cligne

Felipe
Modifié par Felipe (25 Nov 2006 - 20:45)