cousinlol
Messages postés59Date d'inscriptionmercredi 21 juin 2006StatutMembreDernière intervention26 octobre 2015
-
12 mars 2007 à 18:46
cousinlol
Messages postés59Date d'inscriptionmercredi 21 juin 2006StatutMembreDernière intervention26 octobre 2015
-
13 mars 2007 à 16:06
Bonsoir,
J'ai un script A qui ouvre une fenêtre B avec "window.open"
La fenêtre B ouvre la fenêtre C
De façon aléatoire C faisait disparaître B. C'est à dire que lorsque je
cliquais sur mon bouton retour de C, je revenais directement à A sans
passer par B et cela de temps en temps.
Je n'ai pas réussi à savoir pourquoi.
J'ai fini par décaler "top=50, left=50" l'ouverture de C et de temps en temps elle se calque qu'en même sur la position de B. Si C est sur B, j'ai perdu B.
Et comme je dois revenir à fenêtre parent, il ne sait pas où aller.
stfou
Messages postés450Date d'inscriptionsamedi 16 avril 2005StatutMembreDernière intervention18 avril 20073 12 mars 2007 à 19:16
A mon avis, comme tu fait window.close() et que c'est une fenêtre ouverte dynamiquement, alors l'opener reste le même :
A>>B (opener=a)>>C (opener=b=a);
Mais je sais pas trop...
<hr />Le travail n'a jamais tué personne, mais pourquoi prendre le rique ?
cousinlol
Messages postés59Date d'inscriptionmercredi 21 juin 2006StatutMembreDernière intervention26 octobre 2015 12 mars 2007 à 19:30
Pourquoi de façon aléatoire.
Lorsque j'ouvre B à partir de A puis C à partir B et que je vois que C c'est calé sur B, je clique sur retour et je me retrouve sur A.
Je clique pour ouvrir B puis C et là C est bien décalé par rapport à B.
stfou
Messages postés450Date d'inscriptionsamedi 16 avril 2005StatutMembreDernière intervention18 avril 20073 12 mars 2007 à 19:51
alors dans ce cas, je ne comprends pas le problème, mais je vais essayer de le résoudre... :)
tu as essayé d'ouvrir les deux fenêtres a partir de A ? (je sens que g rien compris)
<hr />Le travail n'a jamais tué personne, mais pourquoi prendre le rique ?
cousinlol
Messages postés59Date d'inscriptionmercredi 21 juin 2006StatutMembreDernière intervention26 octobre 2015 12 mars 2007 à 20:00
Non, je n'ai pas essayé parce que les fenêtres doivent s'ouvrir dans cette ordre A puis B puis C, les ouvertures se faisant à la demande par un onclick.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cousinlol
Messages postés59Date d'inscriptionmercredi 21 juin 2006StatutMembreDernière intervention26 octobre 2015 12 mars 2007 à 21:07
Voici le javascript d'appel des fenêtres :
///function: myShowModalDialog(url,mode,reference)
// arguments:
// -url : url to open in the popup
// -mode : innerHTML | value | function | functionRef | style.<JS_style_property>
// -reference :
// avec le mode 'innerHTML' ou 'value' il s'agit de l'id de l'element dans
// le DOM qu'il faudra mettre à jour
// en mode 'function' il s'agit du nom de la fonction sous forme de chaine
// alors qu'avec 'functionRef' il s'agit de la function elle même (pointeur)
// -windowParam: troisiement argument de window.open
function newShowModalDialog(url,mode,reference,windowParam)
{
var winOpenned=MODAL_alreadyOpen(mode,reference);
if(winOpenned!=null) { winOpenned.focus(); return; }
var id=MODAL_DIALOG_LIST.length;
var newWin=window.open(url,'modal_'+id,windowParam);
MODAL_DIALOG_LIST.push(Array(newWin,mode,reference,true)); //format win, mode, referecene , isOpen
}
//Fonction que doit appeler la fenetre modale pour transmettre la nouvelle valeur
// Exemple de code a placer dans votre fenetre modale :
// window.opener.modalCallBackFunction(window.self,'MA VALEUR');
function modalCallBackFunction(winRef,newValue)
{
if(newValue==null) { return; } //pas de valeur renvoyé
var modalObj=MODAL_findModalByWinRef(winRef);
if(MODAL_findModalByWinRef==null) //impossible de trouver la modal correspondante
{
alert('Error : unable to found window reference for callBack procedure.');
}
else
{
var modeList=Array();
modeList=modalObj[1].split('|');
for(var i=0 ; i<modeList.length ; i++)
{
switch(modeList[i])
{
case 'innerHTML' :
var tmp=document.getElementById(modalObj[2]);
tmp.innerHTML=newValue;
break;
case 'value' :
var tmp=document.getElementById(modalObj[2]);
tmp.value=newValue;
break;
case 'function' :
eval(modalObj[2]+'(\''+newValue+'\')');
break;
case 'functionRef' :
modalObj[2](newValue);
break;
default :
if(modeList[i].indexOf('style.')==0) //exemple style.backgroundColor
{
//ATTENTION newValue doit être correctement formatte,
//a vous de faire en sorte que votre fenetre modale renvoie la bonne valeur avec le bon formatage
// exemeple qu'une couleur soit au format '#ff0033' ou rgb(255,0,85) etc...
try
{
eval('document.getElementById(\''+modalObj[2]+'\').'+modeList[i]+'=\''+newValue+'\';');
} catch(e) { ; }
}
break;
}
}
}
}
//---- Inutile de regarder plus bas, seul la fonction newShowModalDialog est a appeler pour construire une fenetre modal --//
// Variables globales du script
var MODAL_DIALOG_LIST=Array();
//méthode globales du script
function MODAL_alreadyOpen(mode,reference)
{
for(var i=0 ; i<MODAL_DIALOG_LIST.length ; i++)
{
if(MODAL_DIALOG_LIST[i][1]==mode && MODAL_DIALOG_LIST[i][2]==reference && MODAL_DIALOG_LIST[i][3])
{
//on test si elle est encore ouverte
if(MODAL_DIALOG_LIST[i][0].document) { return MODAL_DIALOG_LIST[i][0]; }
else //la fenetre a été fermée sans qu'elle est pu prevenir la fenetre mere, on corrige donc le flag isOpen
{
MODAL_DIALOG_LIST[i][3]=false;
}
}
}
return null;
}
function MODAL_findModalByWinRef(winRef)
{
for(var i=0 ; i<MODAL_DIALOG_LIST.length ; i++)
{
if(MODAL_DIALOG_LIST[i][0]==winRef && MODAL_DIALOG_LIST[i][3])
{
//on test si elle est encore ouverte
if(MODAL_DIALOG_LIST[i][0].document) { return MODAL_DIALOG_LIST[i]; }
else //la fenetre a été fermée sans qu'elle est pu prevenir la fenetre mere, on corrige donc le flag isOpen
{
MODAL_DIALOG_LIST[i][3]=false;
}
}
}
return null;
}
//force le focus sur les modal encore ouverte (en thoerie il ne peut y en avoir qu'une seule encore d'ouverte)
function MODAL_forceFocusOnModal()
{
for(var i=0 ; i<MODAL_DIALOG_LIST.length ; i++)
{
if(MODAL_DIALOG_LIST[i][3] && MODAL_DIALOG_LIST[i][0].document) { MODAL_DIALOG_LIST[i][0].focus(); }
}
return;
}
//ajout d'un handler sur la reprise du focus, permettant d'imediatement redonner le focus a une eventuelle modal encore ouverte
if (document.addEventListener) { document.addEventListener("focus", MODAL_forceFocusOnModal, true); }
else if (document.attachEvent) { document.attachEvent("onfocus", MODAL_forceFocusOnModal); }