11484 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Les différentes pages de mon site ouvrent des popups à la demande de l'utilisateur. Ces popups ne se ferment pas à la fermeture de la page qui les a créées.

Par contre je voudrais qu'à la fermeture du site sur un évènement de type 'onBeforeunLoad' toutes les popups actives se ferment automatiquement.

merci d'avance pour vos réponses.
Le problème c'est que "la fermeture d'un site" ça ne peut pas être détecter...
Un onglet, 2 onglets, x onglets ouvert avec ton site ?...
Au mieux tu pourrais faire ce que tu veux lors d'un clic (sur le logout par exemple).
Merci pour ta réponse.

Toutes les pages du site sont à priori dans le même onglet pour une utilisation normale.

Les popups servent à faciliter la consultation ou l'administration.

Je peux éventuellement détecter le changement de page ( voir essai avec page1.html )
mais pas les "reload"

exemple :

page1.html


<html>
<head>
<title>Page 1</title>
<script type="text/javascript">

var VE= null;
var w = null;
var quitter = 0;

function popup( url, nom, option ) {
	w = window.open(url,nom,option);
	w.focus();
}

function open_VE() {
	popup( 'page3.html', 'VE', 'width=200,height=200,top=200,left=200' );
	VE = w;
}

function fermer_popup() {
	if ( !quitter ) alert('fermer');
}

</script>
</head>

<body onBeforeunLoad='fermer_popup()' >
<a href="#" onclick="open_VE();">Ouvrir popup</a>
<br />
<a href="page2.html" onClick='quitter=1';>page 2</a>
</body>
</html>


page2.html

<html>
<head>
<title>Page 2</title>
<script type="text/javascript">

var VE= null;
var w = null;

function popup( url, nom, option ) {
	w = window.open(url,nom,option);
	w.focus();
}

function open_VE() {
	if ( VE || !VE.closed ) {
		alert( "popup déjà ouverte" );
	}
	else {
		popup( 'page3.html', 'VE', 'width=200,height=200,top=200,left=200' );
		VE = w;
	}
}

</script>
</head>

<body>
<a href="#" onclick="open_VE();">Ouvrir popup</a>
<br />
<a href="page1.html" >page 1</a>
</body>
</html>


page3.html (popup )

<html>
<head>
<title>popup</title>
<script type="text/javascript">
function suivi() {
	opener.VE = self.window;
}

setInterval('suivi()',200);

</script>
</head>

<body>
blabla
</body>
</html>
Hello,

Pour répondre simplement à ta question, tu pourrais essayer de sauvegarder dans une variable globale (propre à ta page principale) la liste des popups ouvertes (ta variable w) et les fermer toutes lors du onBeforeUnLoad.

Mais ensuite, fais quand même attention avec les variables globales, tu sembles les utiliser assez facilement, et cela peut très vite rendre le code trop complexe et prompt a des erreurs.
Tu applique aussi tes event inline avec des onclick, c'est déconseillé, il vaut mieux les attribuer directement depuis un script (la syntaxe differe selon les navigateurs, je te conseille d'utiliser un framework tel que jQuery pour cela).
Et pour finir, a tu considéré l'utilisation de fenetres de type lightbox/modalbox plutot que de popups ?