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

Problème d'ouverture/fermeture de fenêtre

10 réponses
Avatar
xb
Bonjour

J'ai besoin d'un coup de main pour régler le problème suivant :

J'ai une page HTML toute simple, sur laquelle plusieurs liens renvoient vers
une pop-up, mais à des endroits différents.
J'ai donc dans ma 1ère fenêtre, des liens du genre :

<a href='javascript:Actu(1)'>lien1</a>
<a href='javascript:Actu(2)'>lien2</a>
<a href='javascript:Actu(3)'>lien3</a>
etc.

avec la fonction js :

function Actu(x) {
var
ActuF=window.open('','ActuF','width=500,height=400,left=40,top=40,marginwidth=0,marginheight=0,resizable=yes,scrollbars=yes,status=no,toolbar=no,menubar=no')
ActuF.location = "Actu.html#"+x;
}

Tout marche bien, sauf que, après le premier clic, la fenêtre étant déjà
ouverte, le pop-up ne se réactive pas.
Le lien fonctionne bien, mais il faut aller sur le pop-up pour se rendre
compte que l'ascenseur s'est placé au bon endroit.

Que faire ?
J'ai mis sur ma page Actu.html, après le <body> :
<SCRIPT LANGUAGE="JavaScript"><!--
self.focus();
//--></SCRIPT>

Et là, ça ne marche pas !
Le plus étrange, c'est que si ma fonction est de la forme

function Actu(x) {
var
ActuF=window.open('','ActuF','width=500,height=400,left=40,top=40,marginwidth=0,marginheight=0,resizable=yes,scrollbars=yes,status=no,toolbar=no,menubar=no')
ActuF.location = "Actu.html";
}

(sans le '#'(suivi du numéro)), ça tourne !
mais avec le '#', pas de self.focus() !!

J'ai essayé de fermer la fenêtre avant de la réouvrir, et là non plus ça ne
marche pas :
ActuF.close(); ("! Erreur sur la page")

... alors que c'est la syntaxe que j'ai trouvée partout !

Quelqu'un aurait-il une idée ?

Merci d'avance.

10 réponses

Avatar
xb
PS : je me rends compte qu'il est bientôt l'heure que je rentre chez moi,
aussi je ne pourrai pas répondre avant demain, mais si quelqu'un me donne
une piste, je l'en remercie par avance, et je lui répondrai plus tard.

Xavier
Avatar
ASM

J'ai donc dans ma 1ère fenêtre, des liens du genre :


C'est très très mal de faire comme ça ! (cf + bas)

<a href='javascript:Actu(1)'>lien1</a>
<a href='javascript:Actu(2)'>lien2</a>
<a href='javascript:Actu(3)'>lien3</a>

avec la fonction js :


marginwidth=0,marginheight=0,
ça ne sert à rien et ne fait pas partie des attributs de fenêtre
status=no,
ne sert à rien non plus :
les navigateurs modernes refusent de cacher leur barre d'état
toolbar=no,menubar=no
pareil que si avaient été omis

function Actu(x) {
var
ActuF=window.open('','ActuF','widthP0,,left@,top@,marginwidth=0,marginheight=0,resizable=yes,scrollbars=yes,status=no,toolbar=no,menubar=no')
ActuF.location = "Actu.html#"+x;
}

Tout marche bien, sauf que, après le premier clic, la fenêtre étant déjà
ouverte, le pop-up ne se réactive pas.


Non, seule la page demandée y est chargée
et comme c'est la même ... (Actu.html) rien ne devrait y être RE-chargé.

Le lien fonctionne bien, mais il faut aller sur le pop-up pour se rendre
compte que l'ascenseur s'est placé au bon endroit.


Donc ce que tu veux faire fonctionne
(si c'est pas dommage !
alors que c'est très vilain de mettre un JS dans un href)

Que faire ?


Mais, bon sang! mais c'est bien sûr !
Mais c'est tout simple :

function Actu(x) {
// si y a pas d'ActuF connue au bataillon
if(ActuF==null || !ActuF || ActuF.closed)
// on l'ouvre (vide) (tiens ? comme c'est bizarre)
ActuF=window.open('','','widthP0,,left@,top@,resizable=1,scrollbars=1,status=0')
// on y glisse qque chose
ActuF.location = x;
// on la met devant (voici le maillon faible et manquant)
ActuF.focus();
}

et avec les liens polis et conformes :

<a href="Actu.html#1" onclick="Actu(this.href); return false;">lien1</a>
<a href="Actu.html#2" onclick="Actu(this.href); return false;">lien2</a>
<a href="Actu.html#3" onclick="Actu(this.href); return false;">lien3</a>


J'ai mis sur ma page Actu.html, après le <body> :
<SCRIPT LANGUAGE="JavaScript"><!--


Nan et nan ! c'est :

<SCRIPT type="text/javascript">

self.focus();
//--></SCRIPT>


c'est pas terrible,
peut-être :
<SCRIPT type="text/javascript">
onload= function() { self.focus();}
</SCRIPT>

J'ai essayé de fermer la fenêtre avant de la réouvrir, et là non plus ça ne
marche pas :
ActuF.close(); ("! Erreur sur la page")


Normal : tu as enfermé le nom de "ActuF" dans ta fonction :

var ActuF = ...

il est inconnu au bataillon.
(non accessible par quoi que ce soit sauf par le rappel de la fonction
créatrice)

... alors que c'est la syntaxe que j'ai trouvée partout !


Eh! ben! partout y sont pas fortiches !
à moins que ... peut-être qques 'tits trucs t'ont échappés ?

Bien que si partout ils utilisent : <SCRIPT LANGUAGE="JavaScript">
ça ne laisse rien augurer de bon pour la suite :-(

Quelqu'un aurait-il une idée ?


une sorte de tuto :
http://perso.wanadoo.fr/stephane.moriaux/internet/web_html/java/fenetr/
La Bible :
http://developer.mozilla.org/fr/docs/DOM:window.open

--
Stephane Moriaux et son [moins] vieux Mac

Avatar
xb
Merci !

En fait, il a suffit que je rajoute ActuF.focus(); dans la fonction de ma
1ere page.
Mais comme ton "ActuF.focus(); " m'a tiré de l'embarras, je te pardonne bien
volontiers toutes tes railleries !

;-)



"ASM" a écrit dans le message
de news: 447c851e$0$21288$

J'ai donc dans ma 1ère fenêtre, des liens du genre :


C'est très très mal de faire comme ça ! (cf + bas)

<a href='javascript:Actu(1)'>lien1</a>
<a href='javascript:Actu(2)'>lien2</a>
<a href='javascript:Actu(3)'>lien3</a>

avec la fonction js :


marginwidth=0,marginheight=0,
ça ne sert à rien et ne fait pas partie des attributs de fenêtre
status=no,
ne sert à rien non plus :
les navigateurs modernes refusent de cacher leur barre d'état
toolbar=no,menubar=no
pareil que si avaient été omis

function Actu(x) {
var
ActuF=window.open('','ActuF','widthP0,,left@,top@,marginwidth=0,marginheight=0,resizable=yes,scrollbars=yes,status=no,toolbar=no,menubar=no')
ActuF.location = "Actu.html#"+x;
}

Tout marche bien, sauf que, après le premier clic, la fenêtre étant déjà
ouverte, le pop-up ne se réactive pas.


Non, seule la page demandée y est chargée
et comme c'est la même ... (Actu.html) rien ne devrait y être RE-chargé.

Le lien fonctionne bien, mais il faut aller sur le pop-up pour se rendre
compte que l'ascenseur s'est placé au bon endroit.


Donc ce que tu veux faire fonctionne
(si c'est pas dommage !
alors que c'est très vilain de mettre un JS dans un href)

Que faire ?


Mais, bon sang! mais c'est bien sûr !
Mais c'est tout simple :

function Actu(x) {
// si y a pas d'ActuF connue au bataillon
if(ActuF==null || !ActuF || ActuF.closed)
// on l'ouvre (vide) (tiens ? comme c'est bizarre)
ActuF=window.open('','','widthP0,,left@,top@,resizable=1,scrollbars=1,status=0')
// on y glisse qque chose
ActuF.location = x;
// on la met devant (voici le maillon faible et manquant)
ActuF.focus();
}

et avec les liens polis et conformes :

<a href="Actu.html#1" onclick="Actu(this.href); return false;">lien1</a>
<a href="Actu.html#2" onclick="Actu(this.href); return false;">lien2</a>
<a href="Actu.html#3" onclick="Actu(this.href); return false;">lien3</a>


J'ai mis sur ma page Actu.html, après le <body> :
<SCRIPT LANGUAGE="JavaScript"><!--


Nan et nan ! c'est :

<SCRIPT type="text/javascript">

self.focus();
//--></SCRIPT>


c'est pas terrible,
peut-être :
<SCRIPT type="text/javascript">
onload= function() { self.focus();}
</SCRIPT>

J'ai essayé de fermer la fenêtre avant de la réouvrir, et là non plus ça
ne marche pas :
ActuF.close(); ("! Erreur sur la page")


Normal : tu as enfermé le nom de "ActuF" dans ta fonction :

var ActuF = ...

il est inconnu au bataillon.
(non accessible par quoi que ce soit sauf par le rappel de la fonction
créatrice)

... alors que c'est la syntaxe que j'ai trouvée partout !


Eh! ben! partout y sont pas fortiches !
à moins que ... peut-être qques 'tits trucs t'ont échappés ?

Bien que si partout ils utilisent : <SCRIPT LANGUAGE="JavaScript">
ça ne laisse rien augurer de bon pour la suite :-(

Quelqu'un aurait-il une idée ?


une sorte de tuto :
http://perso.wanadoo.fr/stephane.moriaux/internet/web_html/java/fenetr/
La Bible :
http://developer.mozilla.org/fr/docs/DOM:window.open

--
Stephane Moriaux et son [moins] vieux Mac



Avatar
ASM
je te pardonne bien
volontiers toutes tes railleries !


Attention ! ATTENTION !

Je l'ai présenté sous le mode railleries bonnasses mais ces railleries
sont à prendre en considération très sérieusement.

Je pouvais te laisser dans tes mauvaiese habitudes et ne te donner que
le focus manquant.
Je n'en ai pas fait 3 pages juste pour le plaisir.

--
Stephane Moriaux et son [moins] vieux Mac

Avatar
xb
"ASM" a écrit dans le message
de news: 447d617a$0$29402$
je te pardonne bien volontiers toutes tes railleries !


Attention ! ATTENTION !

Je l'ai présenté sous le mode railleries bonnasses mais ces railleries
sont à prendre en considération très sérieusement.

Je pouvais te laisser dans tes mauvaiese habitudes et ne te donner que le
focus manquant.
Je n'en ai pas fait 3 pages juste pour le plaisir.



J'avais bien compris, et j'avoue que je n'ai pas beaucoup de connaissances
en javascript.
En général, j'essaie de modifier des scripts que je récupère à droite à
gauche.
Le problème, c'est je n'ai pas assez de temps pour reprendre à zéro l'étude
du JS, et ce que je recherche, quitte à choquer les puristes, c'est que mes
pages tournent correctement.
En tout cas, merci pour ta réponse.
A+

Xavier

--
Stephane Moriaux et son [moins] vieux Mac



Avatar
ASM
"ASM" a écrit dans le message
de news: 447d617a$0$29402$

Je pouvais te laisser dans tes mauvaiese habitudes et ne te donner que le
focus manquant.


Le problème, c'est je n'ai pas assez de temps pour reprendre à zéro l'étude
du JS, et ce que je recherche, quitte à choquer les puristes, c'est que mes
pages tournent correctement.


Justement ... si le visiteur n'a pas activé son JS, avec les appels dans
le href, il ne verra jamais ce que tu veux lui montrer.

On ne peut réellement appeler ça tourner correctement.

Pour ne pas reprendre le JS à zéro, à plus forte raison, autant
n'utiliser et n'archiver que le minima correct.


--
Stephane Moriaux et son [moins] vieux Mac


Avatar
xb
"ASM" a écrit dans le message
de news: 447db70a$0$20182$
"ASM" a écrit dans le
message de news: 447d617a$0$29402$

Je pouvais te laisser dans tes mauvaiese habitudes et ne te donner que le
focus manquant.


Le problème, c'est je n'ai pas assez de temps pour reprendre à zéro
l'étude du JS, et ce que je recherche, quitte à choquer les puristes,
c'est que mes pages tournent correctement.


Justement ... si le visiteur n'a pas activé son JS, avec les appels dans
le href, il ne verra jamais ce que tu veux lui montrer.


??
et ça marche avec des trucs du genre <a href="x.htm" onclick="fonction(y);
return false;">lien</a> ??
:-O
Merci pour l'info. Je la note et je m'en félicite.
Décidément, je vais finir par croire qu'il faut que j'étudie un peu le JS
avant d'en faire.
;-)



On ne peut réellement appeler ça tourner correctement.

Pour ne pas reprendre le JS à zéro, à plus forte raison, autant n'utiliser
et n'archiver que le minima correct.


--
Stephane Moriaux et son [moins] vieux Mac




Avatar
ASM
"ASM" a écrit dans le message
de news: 447db70a$0$20182$

Justement ... si le visiteur n'a pas activé son JS, avec les appels dans
le href, il ne verra jamais ce que tu veux lui montrer.



??
et ça marche avec des trucs du genre <a href="x.htm" onclick="fonction(y);
return false;">lien</a> ??
:-O


si tu fais des bêtises essssprès faudra pas te plaindre :-)

Merci pour l'info. Je la note et je m'en félicite.


Mais, oui, par cette méthode on peut imaginer faire envoyer une page
différente selon que le navigateur a le JS actif ou non.

Cependant, en général, l'idée du truc est de pouvoir envoyer la même
page, la fonction JS associée étant souvent là uniquement pour afficher
dans un popup.

Dans ce cas de figure, le mieux est :

<script type="text/javascript">
var truc=null;
function pop() {
if(truc==null || !truc || truc.closed)
truc=window.open('','visuel','width00,,resisable=1,scrollbars=1');
truc.focus();
}
</script>

<a href="x.htm" target="visuel" onclick="pop()">page x</a>

La page x sera toujours ouverte dans "visuel"
- si pas de JS, le navigateur
- au 1er envoi ouvre une nouvelle fenêtre de cible = "visuel"
et y affiche le href
- aux envois suivants si fenêtre "visuel" pas refermée y affiche
pb : la fenêtre "visuel" ne repasse pas devant :-(
- si JS actif, ouverture du popup (qui possède la cible "visuel")
la page est affichée dans "visuel" donc dans le popup.
(tu auras noté que cette fois on n'annule pas le lien
par return:false;)

Décidément, je vais finir par croire qu'il faut que j'étudie un peu le JS
avant d'en faire.
;-)


:-)

Ha oui, aussi :
si tu utilises des frames (il parait que de nos jours c'est beurk)
-> le double lien.

<a href="A.htm" target="droite" onclick="parent.haut.localion='H.htm';">
page A dans frame 'droite' + page H dans frame 'haut'</a>

--
Stephane Moriaux et son [moins] vieux Mac


Avatar
ASM

erratum

-> le double lien.

<a href="A.htm" target="droite" onclick="parent.haut.localion='H.htm';">
page A dans frame 'droite' + page H dans frame 'haut'</a>


<a href="A.htm" target="droite" onclick="parent.haut.location='H.htm';">
page A dans frame 'droite' + page H dans frame 'haut'</a>

location et non pas lecamion heu... localion


--
Stephane Moriaux et son [moins] vieux Mac

Avatar
xb
Merci pour tout
Xavier


"ASM" a écrit dans le message
de news: 447edbe1$0$21263$

erratum

-> le double lien.

<a href="A.htm" target="droite" onclick="parent.haut.localion='H.htm';">
page A dans frame 'droite' + page H dans frame 'haut'</a>


<a href="A.htm" target="droite" onclick="parent.haut.location='H.htm';">
page A dans frame 'droite' + page H dans frame 'haut'</a>

location et non pas lecamion heu... localion


--
Stephane Moriaux et son [moins] vieux Mac