11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour!
J'ai rencontré un problème sur mon site web, je l'ai à priori contourné, mais je n'arrive pas a comprendre pourquoi cela arrive.

Voila, j'ai une application qui ouvre une popup qui dans sa page charge une div avec AJAX, le contenue de cette div envoyer par PHP qui gère tout le traitement coté server.
Je peu faire quelque rafraichissement de ces donnée en cliquant sur un bouton.
sa ce passe nickel, je ferme ma popup.
mais si je fait cette opération une seconde fois (ouvrir popup/refresh de la div et fermeture) la, a la fermeture (et pas avant) sa me plante IE (pas FF), plus aucune requête ne répond, pourtant javascript est toujours actif (je vois mes menus déroulants entre autre) mais des que je demande une page de mon site plus rien, alors que si je demande Google, la plus de problème. Pour retrouver un fonctionnement normal de mon appli je dois fermer IE

Pour contourner le problème a la fermeture de ma popup je charge une page vide qui se ferme elle même, je ne sais pas pourquoi sa fonctionne ni d'ou vient le problème, c'est pourquoi j'ai besoin de vos lumières (ma solution sa fait quand même bidouille...)

Voici le code JS du chargement et du refresh :

function refresh(){
				while(document.getElementById("table_0").firstChild){
					var elem=document.getElementById("table_0").removeChild(document.getElementById("table_0").firstChild);
					elem=null;
				}
				chargeOnglet(onglet_actif);
			}
			
			var xhr=null;
			function chargeOnglet(onglet){
				xhr=getXHR();
				xhr.onreadystatechange = function() {XHR_Charge(onglet)}
				xhr.open("GET", "rf_report.php?onglet="+onglet+"&type="+type, true);
				xhr.send(null);
			}
			
			function XHR_Charge(onglet){
					if(xhr.readyState == 4 && xhr.status == 200){
						var docXML=xhr.responseXML;
						var items=docXML.getElementsByTagName("zone");
						var origine=document.getElementById("corp");
						if(onglet=="onglet_0"){
							var tbody=null;
							if(document.getElementById("table_0")){
								tbody=document.getElementById("table_0");
							}
							else{
								document.getElementById("bandeau_onglet_0").style.display="block";
								var table=document.createElement("table");
								origine.appendChild(table);
								table.style.width="100%";
								table.setAttribute("border","0");
								table.setAttribute("cellpadding","0");
								table.setAttribute("cellspacing","0");
								var colgroup = document.createElement("colgroup");
								var col1 = document.createElement("col");
								colgroup.appendChild(col1);
								table.appendChild(colgroup);
								col1.setAttribute("width","80%");
								tbody= document.createElement("tbody");
								tbody.setAttribute("id","table_0");
								table.appendChild(tbody);
							}
							origine=tbody;
						}
						else document.getElementById("bandeau_onglet_0").style.display="none";
						for(var i=0;i<items.length;i++){
							if(onglet!="onglet_0")origine=document.getElementById("corp");
							if(items.item(i).getAttribute("id")!="0"){
								var zone=null;
								if(document.getElementById(items.item(i).getAttribute('nom'))){
									zone=document.getElementById(items.item(i).getAttribute('nom'));
								}
								else{
									zone = document.createElement("div");
									zone.className=items.item(i).getAttribute('class');
									zone.setAttribute('name',items.item(i).getAttribute('id'));
									zone.setAttribute('id',items.item(i).getAttribute('nom'));
									if (document.all)zone.style.cssText=items.item(i).getAttribute('style');
									else zone.setAttribute('style',items.item(i).getAttribute('style'));
									origine.appendChild(zone);
								}
								origine=zone;
								
							}
							var elems=items.item(i).getElementsByTagName("elem");
							for(var j=0;j<elems.length;j++){
								if(elems.item(j).getAttribute("type")=="btn"){
									var button= document.createElement("a");
									if (document.all){
										button.style.cssText=elems.item(j).getAttribute('style');
										button.onclick=function(){clickbtn(this.id);};
									}
									else {
										button.setAttribute('style',elems.item(j).getAttribute('style'));
										button.setAttribute('onclick',"clickbtn('"+elems.item(j).getAttribute('nom')+"');");
									}
									button.setAttribute('modif','0');
									button.setAttribute('name',elems.item(j).getAttribute('id'));
									button.setAttribute('id',elems.item(j).getAttribute('nom'));
									var txt=document.createTextNode(elems.item(j).getAttribute('src'));
									button.appendChild(txt);
									var master = elems.item(j).getAttribute('master');
									var slave = elems.item(j).getAttribute('slave');
									if(master!="")button.setAttribute('master',master);
									if(slave!="")button.setAttribute('slave',slave);
									origine.appendChild(button);
									if(document.getElementById(elems.item(j).getAttribute('id'))){
										button.className=document.getElementById(elems.item(j).getAttribute('id')).value;
									}
									else{ 
										button.className=(elems.item(j).firstChild.firstChild)?elems.item(j).firstChild.firstChild.nodeValue : elems.item(j).getAttribute('class');
									}
								}
								if(elems.item(j).getAttribute("type")=="textarea"){
									var textArea= document.createElement("textarea");
									textArea.className=elems.item(j).getAttribute('class');
									textArea.setAttribute('name',elems.item(j).getAttribute('id'));
									textArea.setAttribute('id',elems.item(j).getAttribute('nom'));
									if (document.all){
										textArea.style.cssText=elems.item(j).getAttribute('style');
										textArea.onclick=function(){this.setAttribute('modif','1');};
									}
									else{
										textArea.setAttribute('style',elems.item(j).getAttribute('style'));
										textArea.setAttribute('onclick',"this.setAttribute('modif','1');");
									}
									textArea.setAttribute('modif','0');
									origine.appendChild(textArea);
									if(document.getElementById(elems.item(j).getAttribute('id')))textArea.value=document.getElementById(elems.item(j).getAttribute('id')).value;
									else textArea.value=(elems.item(j).firstChild.firstChild)?elems.item(j).firstChild.firstChild.nodeValue : "";

								}
								if(elems.item(j).getAttribute("type")=="input"){
									var input= document.createElement("input");
									input.setAttribute('type','text');
									input.setAttribute('name',elems.item(j).getAttribute('id'));
									input.setAttribute('id',elems.item(j).getAttribute('nom'));
									input.className=elems.item(j).getAttribute('class');
									if (document.all){
										input.style.cssText=elems.item(j).getAttribute('style');
										input.onclick=function(){this.setAttribute('modif','1');};
									}
									else{
										input.setAttribute('style',elems.item(j).getAttribute('style'));
										input.setAttribute('onclick',"this.setAttribute('modif','1');");
									}
									input.setAttribute('modif','0');
									origine.appendChild(input);
									if(document.getElementById(elems.item(j).getAttribute('id'))) input.value=document.getElementById(elems.item(j).getAttribute('id')).value;
									else input.value=(elems.item(j).firstChild.firstChild)?elems.item(j).firstChild.firstChild.nodeValue : "";
								}
								if(elems.item(j).getAttribute("type")=="label"){
									var label= document.createElement("label");
									label.setAttribute('name',elems.item(j).getAttribute('id'));
									label.setAttribute('id',elems.item(j).getAttribute('nom'));									
									label.className=elems.item(j).getAttribute('class');
									if (document.all)label.style.cssText=elems.item(j).getAttribute('style');
									else label.setAttribute('style',elems.item(j).getAttribute('style'));
									//on stock le texte des label dans le champ src dans la base
									var txt = document.createTextNode("");
									label.appendChild(txt);
									origine.appendChild(label);
									label.firstChild.nodeValue=elems.item(j).getAttribute('src');
								}
								if(elems.item(j).getAttribute("type")=="img"){
									var img= document.createElement("img");
									img.className=elems.item(j).getAttribute('class');
									img.setAttribute('name',elems.item(j).getAttribute('id'));
									img.setAttribute('id',elems.item(j).getAttribute('nom'));
									if (document.all)img.style.cssText=elems.item(j).getAttribute('style');
									else img.setAttribute('style',elems.item(j).getAttribute('style'));
									origine.appendChild(img);
									img.setAttribute('src',elems.item(j).getAttribute('src'));
								}
								if(elems.item(j).getAttribute("type")=="master" || elems.item(j).getAttribute("type")=="perso"){
									var tr=null;var td1=null;var td2=null;
									if(document.getElementById(elems.item(j).getAttribute('id'))){
										td1=document.getElementById(elems.item(j).getAttribute('id'));
										td2=document.getElementById(elems.item(j).getAttribute('id')+"_date");
									}
									else{
										tr= document.createElement("tr");
										td1= document.createElement("td");
										td2= document.createElement("td");
										var td3=document.createElement("td");
										var coche=document.createElement("input");
										coche.setAttribute("type","checkbox");
										coche.setAttribute('id','elem_0_'+elems.item(j).getAttribute('id'));
										td1.setAttribute('name',elems.item(j).getAttribute('id'));
										td1.setAttribute('id',elems.item(j).getAttribute('id'));	
										td2.setAttribute('name',elems.item(j).getAttribute('id')+"_date");
										td2.setAttribute('id',elems.item(j).getAttribute('id')+"_date");
										td2.setAttribute("align","right");
										var txt1 = document.createTextNode("");
										var txt2 = document.createTextNode("");
										td1.appendChild(txt1);
										td2.appendChild(txt2);
										td3.appendChild(coche);
										tr.appendChild(td1);
										tr.appendChild(td2);
										tr.appendChild(td3);		
										tr.style.cssText="cursor:pointer;";
										if (document.all){
											id=elems.item(j).getAttribute('id');
											td1.onclick=function(){modifElem_0(eval(id));};
											td2.onclick=function(){modifElem_0(eval(id));};
										}
										else{
											td1.setAttribute("onclick","modifElem_0('"+elems.item(j).getAttribute('id')+"')");
											td2.setAttribute("onclick","modifElem_0('"+elems.item(j).getAttribute('id')+"')");
										}
										if(j%2==0)tr.style.backgroundColor="<?php echo $_COLOR[0]?>";
										else tr.style.backgroundColor="<?php echo $_COLOR[1]?>";
										origine.appendChild(tr);
									}
									td1.firstChild.nodeValue=(elems.item(j).firstChild.firstChild)?elems.item(j).firstChild.firstChild.nodeValue : "";
									td2.firstChild.nodeValue=(elems.item(j).firstChild.firstChild)?elems.item(j).getElementsByTagName('heure').item(0).firstChild.nodeValue+elems.item(j).getElementsByTagName('heure').item(0).lastChild.firstChild.nodeValue : "";
								}
							}
								
								
						}
						xhr=null;
					}
				}


si vous avez besoin d'autre partie demander moi...
(
Petite précision, je ne sais pas si sa peu être utile... :
si on demande a visual studio lancer un debug sur ie la sortie me renvoi un "exception de première chance sur 0x07... "
et si je scrute les paquets envoyer avec ethereal , une fois que l'appli a planté, à chaque demande de nouvelle popup rien n'est envoyer Smiley ohwell
)
Modifié par PeuX (14 Sep 2007 - 10:16)