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.

6 réponses

1 2
Avatar
ASM

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.


Ça me semble mal foutu comme idée.
Pourquoi demander 2 manoeuvres au visiteur quand une seule peut faire
l'affaire ?
D'autant qu'il peut bien refermer le popup quand ça lui chante.


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.


Non non, y avait une coquille
Ceci (vérifié) fonctionne :


<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é
}
// penser à faire fermer le popup
// quand la fenêtre mère change de fichier
onunload = function() {
if(Tchat && !Tchat.closed) Tchat.close();
}
</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>

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.


Ha! ben ! aussi ! Si on en découvre à chaque fois ... ! :-/

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


OK.
Je vois que tu est bien arrivé à faire le copié-collé :-)
(en gardant l'erreur)


Et comme le dit Olivier, on aurait aimé savoir ce qu'il y avait dans ce
Tchat (qui nécessite 2 tailles d'affichages).
Autant, suivant l'utilisateur, aucun des 2 ne donnera satisfaction :
bien penser à permettre les ascenseurs et laisser la possibilité de
redimensionner.


... en attendant qu'on remette sur le tapis :
"les popups c'est beurk" ... :-)

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

Avatar
Pascal PONCET
Salut,

Si j'ai bien tout compris, tu veux 2 liens qui ouvrent chacun un popup
différent en taille et en contenu.

D'abord, à propos de la taille des fenêtres, il faut savoir qu'avec des
navigateurs misant sur l'accessibilité, comme Firefox, les fenêtres sont
toujours redimensionnables, popup ou pas ! Donc, gaffe à la mise en page
un peu trop rigide.

Pour le script, il ne faut pas trop compliquer. Voilà un exemple qui
pourra t'éclairer sans bouffer 100 lignes de code.

Côté html :
<a href="test2.html" onClick="return ouvrir(this.href,900,550)">Grande
Taille</a>
<a href="test3.html" onClick="return ouvrir(this.href,750,450)">Petite
Taille</a>

Remarques :
Pour des raisons d'accessibilité, il vaut mieux toujours donner un lien
direct dans "href". On se contente de l'utiliser, si javascript est
fonctionnel côté client, avec "this.href".

Côté javascript :
function ouvrir( url, largeur, hauteur ) {
var params = "status,width=" + largeur + ",height=" + hauteur;
var popup = open( url, null, params );
popup.resizeTo( largeur, hauteur );
popup.focus();
window.onunload = function() { popup.close(); };
return false;
}

Remarques :
Dans les paramètres, tout ce qui n'est pas spécifié ne sera pas visible,
donc inutile de mettre "menubar=no, etc...". Quand un paramètre est
spécifié, il est booléen par défaut, donc "status" tout court est
équivalent à "status=yes" ou "status=1".
Pas besoin de tester si le popup a déjà été ouvert ou non, il suffit de
l'ouvrir avec le même nom ("popup" dans notre code) pour que le lien
s'ouvre dans la même fenêtre.
Par contre, il faut penser à le redimensionner, même si cette
instruction est inutile lors du premier clic.
Il vaut mieux, pour une bonne ergonomie, ajouter un évènement à la
fenêtre principale qui fermera le popup dès que l'on changera de page.
Comme ça, pas de risque de se trouver avec des fenêtres résiduelles.

Ben voilà, c'est tout.
Bonne chance, Pascal
Avatar
ASM

Côté javascript :
function ouvrir( url, largeur, hauteur ) {
var params = "status,width=" + largeur + ",height=" + hauteur;
var popup = open( url, null, params );
popup.resizeTo( largeur, hauteur );
popup.focus();
window.onunload = function() { popup.close(); };
return false;
}


cette fonction fait recharger le fichier appelé
à chaque click sur le lien
J'ai compris que ce n'était pas désiré (? !)

Le resizeTo est généralement désactivé (par défaut sur Fx)

Si l'utilisateur a choisi la navigation par onglet
il va râler de voir sa fenêtre principale se resizer
(s'il n'a pas activé l'anti-resize)

Remarques :
"status" tout court est équivalent à "status=yes" ou "status=1".


et n'a plus d'effet avec Fx (et peut-être d'autres brouteurs)

Pas besoin de tester si le popup a déjà été ouvert ou non, il suffit de
l'ouvrir avec le même nom ("popup" dans notre code) pour que le lien
s'ouvre dans la même fenêtre.


c'est bien le blème ... rechargement systématique

Par contre, il faut penser à le redimensionner, même si cette
instruction est inutile lors du premier clic.
Il vaut mieux, pour une bonne ergonomie, ajouter un évènement à la
fenêtre principale qui fermera le popup dès que l'on changera de page.
Comme ça, pas de risque de se trouver avec des fenêtres résiduelles.


de là à enfoncer le clou à chaque appel de la fonction d'ouverture ...



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

Avatar
JC
Ça me semble mal foutu comme idée.
Pourquoi demander 2 manoeuvres au visiteur quand une seule peut faire
l'affaire ?
D'autant qu'il peut bien refermer le popup quand ça lui chante.


Lorsque le visiteur ouvre le tchat, il est enregistré dans la table des
personnes présentes sur le tchat. Si la fenêtre est fermée sans utiliser
le lien QUITTER, il restera présent sur le tchat (visible aux autres
personnes présentes) pendant 30 sc. (la page ouverte fait un acces à la
base toutes les 5sc, donc si au bout de 30sc il n'y a pas eu d'accès, il
est enlevé de la table alors que si il utilise le lien sur la page, il
est enlevé aussitôt). Bref, si le script ferme la fenêtre du tchat, il
lui sera impossible de s'y connecter pendant les 30sc suivantes car il
sera encore dans la base des personnes présentes.
Je peux modifier mon script php pour qu'il l'enlève de la base des
personnes présentes avant de le connecter si il y est deja.

Non non, y avait une coquille
Ceci (vérifié) fonctionne :
....


Merci, je vais rechercher la coquille et la corriger. Autant en php je
détecte facilement une erreur de syntaxe, autant en javascript je n'y
vois que du feu...


Et comme le dit Olivier, on aurait aimé savoir ce qu'il y avait dans ce
Tchat (qui nécessite 2 tailles d'affichages).
Autant, suivant l'utilisateur, aucun des 2 ne donnera satisfaction :
bien penser à permettre les ascenseurs et laisser la possibilité de
redimensionner.


Voila deux captures d'écran pour chacune des fenêtres :

grande taille : http://www.cijoint.fr/cij34836653910800.jpg
petite taille : http://www.cijoint.fr/cij105932990910838.jpg


... en attendant qu'on remette sur le tapis :
"les popups c'est beurk" ... :-)


Je sais, généralement c'est le cas et je les évite.
merci pour tout, je testerai tout ça ce soir...

JC.



Avatar
JC
Je viens de tester le dernier code. Cela fonctionne bien.
J'ai du enlever cette fonction :

onunload = function() {
if(Tchat && !Tchat.closed) Tchat.close();
}

car la page des liens pour ouvrir le popup est souvent rechargée lors de
la visite sur le site et par conséquent me fermait le popup.
Du coup, lorsque la page est rechargée, la variable 'ceChoix' est
perdue, et il est a nouveau possible de cliquer sur les liens comme si
c'etait la premiere fois, et le script devient inefficace.
La page des liens est en PHP, je vais donc la modifier pour ne pas y
faire figurer les liens si la table des membres contient le visiteur.
Quoi qu'il en soit, j'aurai un peu plus appris sur le fonctionnement du
javascript, et je garde bien sous le coude ce code qui pourra
éventuellement me servir pour un autre développement.
Grand merci encore pour ton aide et le temps passé.

JC.
Avatar
ASM

Ça me semble mal foutu comme idée.
Pourquoi demander 2 manoeuvres au visiteur quand une seule peut faire
l'affaire ?
D'autant qu'il peut bien refermer le popup quand ça lui chante.


Lorsque le visiteur ouvre le tchat, il est enregistré dans la table des
personnes présentes sur le tchat. Si la fenêtre est fermée sans utiliser
le lien QUITTER, il restera présent sur le tchat (visible aux autres
personnes présentes) pendant 30 sc.


Oui, c'est bien ce qu'il me semblait :
un peu casse-cou le système popup pour tchater

(la page ouverte fait un acces à la
base toutes les 5sc, donc si au bout de 30sc il n'y a pas eu d'accès, il
est enlevé de la table alors que si il utilise le lien sur la page, il
est enlevé aussitôt). Bref, si le script ferme la fenêtre du tchat, il
lui sera impossible de s'y connecter pendant les 30sc suivantes car il
sera encore dans la base des personnes présentes.


alors utiliser onunload dans le popup

<script type="text/javascript">
onunload = function() {
document.form['fermeture'].submit();
}
</script>

Ce qui pourra (si ça marche) résoudre la fermeture du popup par
l'utilisateur qui aura utilisé la case de fermeture de la fenêtre.


Ou inclure dans le script d'ouverture du popup
le submitage du bouton/formulaire
(qui ne résout pas la fermeture intempestive).

L'usine à gaz ne s'expansera pas +

<html>
<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.document.form['fermeture'].submit();
// 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é
}
// penser à faire fermer le popup
// quand la fenêtre mère change de fichier
// sauf si le tchat n'a aucun lien à avoir avec le contenu
// de la fenêtre mère.
onunload = function() {
if(Tchat && !Tchat.closed) Tchat.close();
}
</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>
</html>

Je peux modifier mon script php pour qu'il l'enlève de la base des
personnes présentes avant de le connecter si il y est deja.


Oui, sans doute aussi.

y avait une coquille


Merci, je vais rechercher la coquille et la corriger. Autant en php je
détecte facilement une erreur de syntaxe, autant en javascript je n'y
vois que du feu...


c'était une coquille très bête --> 2 '(' au lieu d'1

Et comme le dit Olivier, on aurait aimé savoir ce qu'il y avait dans
ce Tchat (qui nécessite 2 tailles d'affichages).


Voila deux captures d'écran pour chacune des fenêtres :

grande taille : http://www.cijoint.fr/cij34836653910800.jpg
petite taille : http://www.cijoint.fr/cij105932990910838.jpg


Oui, bon ... c'est pas bien différent

(cite)
"si l'utilisateur a choisi d'agradir la police, les messages les plus
ancien ne seront pas affichés"
(/cite)
Pas trop compris comment le php détermine que l'utilisateur a agrandi la
taille de police d'affichage de son navigateur ... ? ?




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


1 2