11548 sujets

JavaScript, DOM et API Web HTML5

Salut à tous,
Voilà je suis en train de développer un site pour un "client" (mes parents en fait Smiley lol ), et ce site utilise de l'AJAX.

L'objectif est en fait de compter le nombre de visiteurs présents sur le site (approximé, bref, ça n'a rien à voir). Le résultat de la requête (php/mysql) est affichée sur ma page 'index.php' via un script javascript (ajax).

La caractéristique asynchrone était en effet intéressante car mon hébergeur a tendance à trainer quelque fois, et je ne voulais pas priver le client de données lors du chargement, juste pour voir combien de personnes étaient connectées...

Donc, j'ai testé mes codes via plusieurs navigateurs (à savoir: Internet Explorer 6, Firefox 2, Opera 9 et Safari 3 (pas encore testé sous IE 7)). Tout fonctionne très bien: les connections mysql via php se font bien (ça n'a rien à voir avec le navigateur mais c'est toujours bon à savoir, je crois... Smiley lol ), la requête ajax affiche ce que je veux, bref, tout va bien.

Sauf 1 brique qui fait s'écrouler tout l'édiffice: Sous Internet Explorer, lors du chargement, une scrollbar qui vient je-ne-sais-d'où se fixe au <div> principale. La taille de ce div n'a pourtant pas été mentionnée dans la feuille de style ! Cela ne se produit pas tout le temps sous IE, mais assez pour que ce soit... vraiment moche (ça ne colle en plus pas au design alors...) voila. Je vai mettre certains des codes en dessous, et si quelqu'un peut m'aider j'en serais ravi.

Structure globale de la page, une fois que tout est chargé
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
		<meta http-equiv="Content-Language" content="fr" />
		<base href="http://www.just1dks.be/ecole/" />
		<style type="text/css" media="screen">@import url("./annexes/screenStyle.css");</style>
		<!--[if IE]>
			<style type="text/css" media="screen">
				table#banniere_zone { width: 855px; }
				ul#menu_zone { width: 900px; }
				div#main { width: 855px; }
			</style>
		<![endif]-->
		<script type="text/javascript" src="./scripts/visitesCount.js"></script>
		<title>Cours d'Alembert A.S.B.L.</title>
	</head>
	<body>
		<table summary="banniere" id="banniere_zone">
header
		</table>
		<div id="altTitle">
<h1>Cours d'Alembert A.S.B.L.</h1>
<hr />
		</div>
                        <ul id="menu_zone">
menu
		</ul>
		<div id="main">
			<div id="image_zone">
<img src="./annexes/bienvenue.png" width="175" height="450" alt="bienvenue" id="image" />
			</div>
			<div id="texte_zone">
				<h3>
CENTRE DE RATTRAPAGE ET DE GUIDANCE SCOLAIRE
				</h3>
				<span>
Notre mission
				</span>
				<p>
texte
				</p>
<hr />
                                                <div class="small">
5519 visites depuis le 1er janvier 2005
                                                </div>
                                                <div class="small" id="nbVisiteurs">&nbsp;</div>
			</div>
		</div>
		<div id="footer">
Derni&egrave;re modification le Mardi 1<sup>er</sup> Avril 2008
<address>Webmaster: Just'1 Dks.</address>
		</div>
		<script type="text/javascript">
new visitesCount();
		</script>
	</body>
</html>


Fonction javascript qui écrit dans la page (JSON, donc pas d'affollement si là comme ça, ça ne veut rien dire)
	format: function(param) { document.getElementById("nbVisiteurs").innerHTML = "Il y a actuellement " + param + " sur le site"; }


Réponse du serveur lors de la requête de comptage

Le script php retourne simplement: x visiteur(s)

Voila c'est tout. Tout le site est dispo. à www.just1dks.be/ecole

Merci d'avance
Justin
Modifié par just1dks (04 Apr 2008 - 09:48)
Personne ?
Et est-ce que quelqu'un connait une extension pour voir le code "courant" de la page sous IE ? (un peu comme firebugg sous firefox).

Merci
Justin
Salut,

Comportement étrange, en effet. Il me semble avoir déjà entendu parler de bugs de ce genre en rapport avec innerHTML.

Peut-être que ton code concernant le positionnement CSS est un peu trop compliqué et déclenche des comportements bizarres en rapport avec le hasLayout, auquel cas je te souhaite bon courage. Peut-être te faudra-t-il simplifier un peu tout ça ?

Pour voir le code correspondant à l'arbre DOM courant, il y a toujours la solution brutale :
javascript:var d=open().document;d.body.appendChild(d.createTextNode(document.documentElement.innerHTML));undefined

(à copier dans la barre d'adresse d'IE)
Merci beaucoup
Je vai en effet simplifier tout ceci, mais passer du temps à essayer de comprendre quand même Smiley ravi

Justin