Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

tester status fenetre

16 réponses
Avatar
JC
Bonjour,

je ne suis pas doué avec le javascript, mais generalement je finis par
touver ce que je cherche sur le net.
Cette fois ci, je bute sur une fonction.
Lors de l'ouverture d'une page, j'ai besoin de savoir si une autre page
est deja ouverte.
J'ai trouvé ce script sur le net, mais impossible de le faire fonctionner :


<script language="JavaScript">
if(Tchat800.closed == false) {
alert("Fenetre Ouverte");
}
else{
alert("Fenetre Fermée");
}
</script>

Je mets ce script apres la balise <body>, et je veux savoir si la
fenetre "Tchat800" est ouverte. Il se passe absolument rien.
Ai-je loupé une étape ? merci de votre aide.

JC.

10 réponses

1 2
Avatar
ASM
Bonjour,

je ne suis pas doué avec le javascript, mais generalement je finis par
touver ce que je cherche sur le net.
Cette fois ci, je bute sur une fonction.
Lors de l'ouverture d'une page, j'ai besoin de savoir si une autre page
est deja ouverte.


ça ne marche que si et seulement si la fenêtre 'Tchat800' (et non la
page !) a été ouverte via JavaScript

<script type="text/javascript">
var Tchat800 = false;

if(Tchat800 && !Tchat800.closed) {
alert("Fenetre Ouverte");
}
else {
alert("Fenetre Fermée");
}
</script>

ou :

<script type="text/javascript">
if(typeof(Tchat800) != 'undefined')
{
if(!Tchat800.closed) { alert("Fenetre Ouverte"); }
else { alert("Fenetre Fermée"); }
}
else alert('pas de Tchat800');
</script>



--
Stephane Moriaux et son (moins) vieux Mac déjà dépassé

Avatar
JC
ça ne marche que si et seulement si la fenêtre 'Tchat800' (et non la
page !) a été ouverte via JavaScript



Hello,

Merci pour ton aide.
j'ai essayé les deux scripts, malheureusement cela ne fonctionne pas.
Pour résumer mon problème, je propose d'ouvrir une page dans deux
fenêtre de taille differente suivant les préférences de l'utilisateur.
Si cette page est deja ouverte dans une fenêtre et que l'utilisateur
essaye de l'ouvrir à nouveau dans la deuxième fenêtre de taille
différente, je désire le détecter et arrêter le chargement de la page.

Les liens pour ouvrir la page dans une fenêtre est un lien en javascript :

<a href=""
onClick="javascript:window.open('../chat/chat1024/index.php','Tchat1024','toolbar=NO,location=NO,status=yes,menubar=NO,resizable=NO,scrollbars=no,width0,heightU0');
return false;">Grande Taille</a>

<a href=""
onClick="javascript:window.open('../chat/chat800/index.php','Tchat800','toolbar=NO,location=NO,status=yes,menubar=NO,resizable=NO,scrollbars=no,widthu0,heightE0');
return false;">Petite Taille</a>



Donc dans le fichier chat/chat1024/index.php je veux tester si la
fenêtre 'Tchat800' est ouverte pour arrêter le chargement de cette page.

et dans le fichier chat/chat800/index.php je veux tester si la fenêtre
'Tchat1024' est ouverte pour arrêter le chargement de cette page.

Si tu vois ou se situe le problème, je te remercie grandement de ton aide.

JC.

Avatar
ASM

Pour résumer mon problème, je propose d'ouvrir une page dans deux
fenêtre de taille differente suivant les préférences de l'utilisateur.
Si cette page est deja ouverte dans une fenêtre et que l'utilisateur
essaye de l'ouvrir à nouveau dans la deuxième fenêtre de taille
différente, je désire le détecter et arrêter le chargement de la page.


Comment l'utilisateur compte s'y prendre pour charger dans une autre
fenêtre déjà ouverte ?

Les liens pour ouvrir la page dans une fenêtre est un lien en javascript :

<a href=""
onClick="javascript:window.open('../chat/chat1024/index.php','Tchat1024','toolbar=NO,location=NO,status=yes,menubar=NO,resizable=NO,scrollbars=no,width0,heightU0');
return false;">Grande Taille</a>


non, ça ce n'est pas bon,
'Tchat1024' n'y est que la cible (le nom de la fenêtre en html)
et n'est pas le nom de cette fenêtre en Javascript.

il faut :

onClick="Tchat1024=window.open('../chat/chat1024/index.php','Tchat1024','to...etc

ainsi tu pourras te servir de 'Tchat1024' (en JS)


Pour ton problème le mieux est de passer par un seul popup
(si ce n'est pas le bon qui est ouvert, on le ferme d'abord)

<script type="text/javascript">

var Tchat = false;
var choix = 0;

function pop(ceChoix) {
// réglage de la taille du popup
var taille = ceChoix==0? 'widthu0,heightE0':
'width0,heightU0';
// arributs du popup
var attr = 'toolbar=0,location=0,status=1,'+
'menubar=0,resizable=0,scrollbars=0'+taille;
// si le popup existe et que le choix est nouveau
if((Tchat && !Tchat.closed) || ceChoix != choix)
{
Tchat.close(); // on le ferme
}
// si le popup n'existe pas ou qu'il a été fermé
if(!Tchat || Tchat.closed)
{
Tchat = window.open('','Tchat',attr); // hop le popup
}
// on enregistre le nouveau choix
choix = ceChoix;
// on fait passer le popup en avant plan
Tchat.focus();
}
</script>

<a href="../chat/chat1024/index.php" target="Tchat"
onclick="pop(1)">Grande Vue</a>
<a href="../chat/chat800/index.php" target="Tchat"
onclick="pop(0)">Petite Vue</a>

Si le JS est activé, le lien va d'abord lancer le popup puis, comme le
popup contient le target 'Tchat', la page appelée va s'y afficher.

Si pas de JS, les nouvelles pages vont s'afficher dans la même nouvelle
fenêtre standard (mais elle ne passera pas devant ... :-( ).

Bien entendu, ni 'chat1024/index.php' ni 'chat800/index.php'
ne comporteront de lien pour ouvrir de nouveaux popups à dimensions
variables ni pour (ré)ouvrir ces fichiers là.

Donc dans le fichier chat/chat1024/index.php je veux tester si la
fenêtre 'Tchat800' est ouverte pour arrêter le chargement de cette page.


Alors là ! non !
D'une part quand tu recharges une page dans une fenêtre, cette dernière
va oublier qu'elle a peut-être un popup fille (ou du moins le nom en JS
de cette fille),
d'autre part pourquoi confier ça à la page qui va se faire charger ?
(alors que ça peut être décidé en amont par le JS)




--
Stephane Moriaux et son (moins) vieux Mac déjà dépassé

Avatar
Olivier Miakinen

Pour résumer mon problème, je propose d'ouvrir une page dans deux
fenêtre de taille differente suivant les préférences de l'utilisateur.


Ah, enfin quelqu'un parmi les développeurs de popups qui comprend
que la taille choisie ne correspond pas forcément aux préférences de
l'utilisateur ! Merci pour cela.

Mais du coup, pourquoi ne pas pousser la logique plus loin, ce qui
serait à la fois plus facile pour toi et moins contraignant pour les
visiteurs : lui laisser la possibilité de retailler la fenêtre ?

En bref, remplacer « resizable=NO » par « resizable=YES ». Tout simplement.

Avatar
JC
Ah, enfin quelqu'un parmi les développeurs de popups qui comprend
que la taille choisie ne correspond pas forcément aux préférences de
l'utilisateur ! Merci pour cela.


C'est exact, imposer une taille ne peut pas convenir à 100% des visiteurs.

Mais du coup, pourquoi ne pas pousser la logique plus loin, ce qui
serait à la fois plus facile pour toi et moins contraignant pour les
visiteurs : lui laisser la possibilité de retailler la fenêtre ?

En bref, remplacer « resizable=NO » par « resizable=YES ». Tout simplement.


Oui, ca serait l'ideal, mais toute la mise en page ne correspondrait ne
suivrait plus lors d'un agrandissement. j'ai préféré developper deux
tailles avec chacune sa mise en page pour satisfaire le maximum de
visiteurs.

JC.

Avatar
JC
Merci encore de tes réponses.

Comment l'utilisateur compte s'y prendre pour charger dans une autre
fenêtre déjà ouverte ?


Sur le site, il y a une page qui permet d'ouvrir le tchat dans deux
fenêtres de taille différentes. C'est exactement la même page avec juste
la mise en page qui est adaptée à la taille de la fenêtre.
Mon souhait est que si l'utilisateur a ouvert le tchat dans une fenêtre,
qu'il lui soit impossible de l'ouvrir une deuxième fois. c'est pour cela
que je cherchais un script qui détecter si une deuxième fenêtre etait
deja ouverte avant de continuer son propre chargement.

il faut :

onClick="Tchat1024=window.open('../chat/chat1024/index.php','Tchat1024','to...etc


ainsi tu pourras te servir de 'Tchat1024' (en JS)


Merci, comme j'ai dit dans le tout premier message, j'ai bcp de mal avec
le javascript. C'est pas du tout le cas avec le PHP/MySql, mais
malheureusement pour mon cas, le PHP ne peut pas tout faire.


Pour ton problème le mieux est de passer par un seul popup
(si ce n'est pas le bon qui est ouvert, on le ferme d'abord)


Je préfère garder la page deja ouverte et refuser que la nouvelle se
charge entièrement, mais avec ce code je pense que je devrais pouvoir
deja mieux m'en sortir !!


Bien entendu, ni 'chat1024/index.php' ni 'chat800/index.php'
ne comporteront de lien pour ouvrir de nouveaux popups à dimensions
variables ni pour (ré)ouvrir ces fichiers là.


Oui, bien sur, pas de liens sur ces pages là.

Je vais tester et adapter tout cela dans la soirée. Je laisserai un
message pour tenir au courant de l'évolution.
Merci encore de m'avoir aidé.

JC.

Avatar
ASM
Merci encore de tes réponses.

Comment l'utilisateur compte s'y prendre pour charger dans une autre
fenêtre déjà ouverte ?


Sur le site, il y a une page qui permet d'ouvrir le tchat dans deux
fenêtres de taille différentes. C'est exactement la même page avec juste
la mise en page qui est adaptée à la taille de la fenêtre.
Mon souhait est que si l'utilisateur a ouvert le tchat dans une fenêtre,
qu'il lui soit impossible de l'ouvrir une deuxième fois.


Ha ! ? c'est pour la continuité du tchat ?
C'est pas un peu en contradiction ?
--> ne par recharger le tchat dans le popup alors qu'il peut avoir été
fermé ...

c'est pour cela
que je cherchais un script qui détecter si une deuxième fenêtre etait
deja ouverte avant de continuer son propre chargement.


si le popup existe (est ouvert) on peut bloquer le lien afin d'empécher
un rechargement (mais ça n'empèchera pas de changer de popup).


<script type="text/javascript">

var Tchat = false;
var choix = 2;

function pop(ceChoix) {
var taille = ceChoix==0? 'widthu0,heightE0':
'width0,heightU0';
var attr = 'toolbar=0,location=0,status=1,'+
'menubar=0,resizable=0,scrollbars=0,'+taille;
// si le popup existe
if((Tchat && !Tchat.closed)
{
// et si le choix est déjà celui là
if(ceChoix == choix)
{
Tchat.focus(); // on repasse le popup devant
return false; // on bloque le lien
}
else
{
Tchat.close(); // sinon on le ferme
}
}
// si le popup n'existe pas ou qu'il a été fermé
if(!Tchat || Tchat.closed)
{
Tchat = window.open('','Tchat',attr); // hop le popup
}
choix = ceChoix; // sauvegarde du nouveau choix
Tchat.focus(); // popup devant
return true; // lien autorisé
}
</script>

<a href="../chat/chat1024/index.php" target="Tchat"
onclick="return pop(1)">
Grande Vue</a>
<a href="../chat/chat800/index.php" target="Tchat"
onclick="return pop(0)">
Petite Vue</a>



Une autre alternative :

<html>
<script type="text/javascript">

var Tchat = false;
var choix = 2;

function pop() {
var ceChoix, url;
var R = document.forms[0]['chx'];
for(var i=0; i<2; i++)
{
if(R[i].checked)
{
ceChoix = i;
url = '../chat/'+R[i].value+'/index.php';
}
}
var taille = ceChoix==0? ',width0,heightU0' :
',widthu0,heightE0';
var attr = 'toolbar=0,location=0,status=1,'+
'menubar=0,resizable=0,scrollbars=0'+taille;
// si le popup existe et le choix a changé
if(Tchat && !Tchat.closed && ceChoix != choix)
{
Tchat.close(); // on le ferme
}
// si le popup n'existe pas ou qu'il a été fermé
if(!Tchat || Tchat.closed)
{
Tchat = window.open(url,'',attr); // hop le popup
}
choix = ceChoix; // sauvegarde du nouveau choix
Tchat.focus(); // popup devant
return false; // stopper l'envoi du form
}
onunload = function() {
if(Tchat && !Tchat.closed) Tchat.close();
}
</script>

<form onsubmit="return pop();">
<fieldset>
<legend>Ouvrir le tchat en :</legend>
<label for="c1">
Grande taille :
<input type=radio name="chx" id="c1" value="chat1024" checked>
</label>
<label for="c2">
Petite taille :
<input type=radio name="chx" id="c2" value="chat800">
</label>
<input type="submit" value=" GO ">
</fieldset>
</form>
</html>

--
Stephane Moriaux et son (moins) vieux Mac déjà dépassé


Avatar
JC
Voila, je viens d'essayer pendant un petit moment de faire fonctionner
ce script, mais cela me marche pas.
j'ai bien changé les liens sur la page principale par:

<a href=""
onClick="Tchat1024=window.open('../chat/chat1024/index.php','Tchat1024','toolbar=NO,location=NO,status=yes,menubar=NO,resizable=NO,scrollbars=no,width0,heightU0');
return false;">Grande Taille</a>

et

<a href=""
onClick="Tchat800=window.open('../chat/chat1024/index.php','Tchat800','toolbar=NO,location=NO,status=yes,menubar=NO,resizable=NO,scrollbars=no,widthu0,heightE0');
return false;">petite Taille</a>

Les liens marchent parfaitement.
Par contre, si je clique pour ouvrir la page de petite vue (Tchat800),
et que j'essaye d'ouvrir la grande vue (tchat1024), aucun des deux
scripts que tu m'as donné dans ta permiere reponse, cela ne detecte pas
que la fenetre 'Tchat800' est deja ouverte.

bref, rien à faire. Je vais donc le faire en php, puisque la page
contenant le chat deja ouverte fait un acces à ma base de donnée toutes
les 5 secondes. Sur toute page qui s'ouvre (tchat800 ou Tchat1024), je
ferai un test pour voir si le dernier acces à la base date de plus de 15sc.


Ah oui, voila un fichier ZIP contenant les 3 fichiers qui resument mon
developpement et qui ne donnent aucun resultat :
http://www.cijoint.fr/cij71797141510735.zip

Merci de votre aide.
JC.
Avatar
JC
Merci de cette réponse. je viens de la voir un peu tard...


Ha ! ? c'est pour la continuité du tchat ?
C'est pas un peu en contradiction ?
--> ne par recharger le tchat dans le popup alors qu'il peut avoir été
fermé ...


En fait, si la fenetre du tchat est deja ouverte, je ne souhaite pas
qu'il puisse en ouvrir uen autre dasn la deuxieme taille disponible.
pour cela, je prefere qui ferme de lui meme la premiere fenetre pour
avoir la possibilité d'ouvrir le tchat dans la 2eme fenetre.

si le popup existe (est ouvert) on peut bloquer le lien afin d'empécher
un rechargement (mais ça n'empèchera pas de changer de popup).


<script type="text/javascript">
.............................

</script>
..............


Je viens de tester ce script. Facile à comprendre, meme si le resultat
n'est pas vraiment celui que je recherche (il ferme le tchat existant si
on clique sur le 2eme lien pour pouvoir l'ouvrir).
Et pourtant cela ne fonctionne pas sur ma machine. Je pense que je dois
avoir un probleme pour executer les scripts, meme si les autres scripts
presents sur mes pages fonctionnent bien.

Je n'ai pas testé le deuxieme script, car il ne peut pas s'adapter à ma
page. Ma page des liens utilise un menu qui me permet pas de mettre des
bouton radio.
Je te remercie bcp d'avoir utilisé de ton temps pour m'aider.

Ci dessous mes pages de tests :
http://www.cijoint.fr/cij17819765910714.zip

JC.




Une autre alternative :

<html>
<script type="text/javascript">

var Tchat = false;
var choix = 2;

function pop() {
var ceChoix, url;
var R = document.forms[0]['chx'];
for(var i=0; i<2; i++)
{
if(R[i].checked)
{
ceChoix = i;
url = '../chat/'+R[i].value+'/index.php';
}
}
var taille = ceChoix==0? ',width0,heightU0' :
',widthu0,heightE0';
var attr = 'toolbar=0,location=0,status=1,'+
'menubar=0,resizable=0,scrollbars=0'+taille;
// si le popup existe et le choix a changé
if(Tchat && !Tchat.closed && ceChoix != choix)
{
Tchat.close(); // on le ferme
}
// si le popup n'existe pas ou qu'il a été fermé
if(!Tchat || Tchat.closed)
{
Tchat = window.open(url,'',attr); // hop le popup
}
choix = ceChoix; // sauvegarde du nouveau choix
Tchat.focus(); // popup devant
return false; // stopper l'envoi du form
}
onunload = function() {
if(Tchat && !Tchat.closed) Tchat.close();
}
</script>

<form onsubmit="return pop();">
<fieldset>
<legend>Ouvrir le tchat en :</legend>
<label for="c1">
Grande taille :
<input type=radio name="chx" id="c1" value="chat1024" checked>
</label>
<label for="c2">
Petite taille :
<input type=radio name="chx" id="c2" value="chat800">
</label>
<input type="submit" value=" GO ">
</fieldset>
</form>
</html>



Avatar
Olivier Miakinen

Mais du coup, pourquoi ne pas pousser la logique plus loin, ce qui
serait à la fois plus facile pour toi et moins contraignant pour les
visiteurs : lui laisser la possibilité de retailler la fenêtre ?

En bref, remplacer « resizable=NO » par « resizable=YES ». Tout simplement.


Oui, ca serait l'ideal, mais toute la mise en page ne correspondrait ne
suivrait plus lors d'un agrandissement. j'ai préféré developper deux
tailles avec chacune sa mise en page pour satisfaire le maximum de
visiteurs.


Ah ! Ce sont des images, et soit tu montres l'image en 900×550, soit tu
montres celle en 750×450. C'est ça ?

Non, parce que si c'est du texte, entre ceux qui ont un PC Windows, ceux
qui ont un Unix et ceux qui ont un Mac ; entre ceux qui ont une bonne
vue et diminuent la taille de la police et ceux qui en ont une mauvaise
et l'augmentent ; entre ceux qui laissent la police de caractères par
défaut et ceux qui imposent Times, Verdana ou Helvetica, ta mise en page
n'a *AUCUNE* chance d'être respectée si tu la définis en fonction d'un
nombre de pixels donné.


1 2