11522 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous
Quand on ouvre une fenêtre par une commande window.open, on peut la fermer par Javascript
Par contre quand on ouvre une fenêtre directement, il n'est pas possible de la fermer par Javascript.
J'aimerais ajouter un bouton de fermeture dans la page uniquement si la page peut être fermée, c'est à dire si elle est ouverte par window.open.
Quelle technique recommanderiez vous pour effectuer cette opération?
Merci de vos conseils
Ma solution actuelle: dans la nouvelle fenêtre, je crée le bouton de fermeture si window.opener n'est pas null
Modifié par PapyJP (03 Mar 2019 - 12:36)
Modérateur
Bonjour,

Je ne vois pas comment on peut avoir une solution portable pour ça. Ça dépend trop des navigateurs et des paramétrages des utilisateurs (même "ouvrir" une fenêtre, c'est loin d'être portable).

Amicalement,
Je n’ai jamais eu le moindre problème avec window.open, non seulement avec ce site qui a très peu d’utilisateurs, mais également avec le site osirisnet.net qui utilise cette fonctionnalité à haute dose et a des milliers d’utilisateurs dans le monde entier. S’il y avait un problème, les images de ce site, qui en font en grande partie l’intérêt, ne seraient visibles que sous forme de miniatures, et nous aurions eu des retours, je pense.
Quelle est la nature du problème que tu anticipes ?
Modérateur
Bonjour,

A) En ce qui concerne window.open(), ça dépend de beaucoup de paramètres, et du code javascript qui précède.

Problèmes potentiels (qui peuvent ne pas être des problèmes pour toi si tu n'es pas dans cette situation, mais qui peuvent l'être dans d'autres cas) :

Exemple 1 : que se passe-t-il si l'utilisateur bloque les popups (et avec quoi) ?

Exemple 2 : que se passe-t-il si le code dans la fenêtre n'est pas du html, mais du pdf, un fichier texte, une image, ..., et comment est généré ce contenu ?

Exemple 3 : que se passe-t-il quand plusieurs fenêtres ont été ouvertes avec window.open() ? avec gestion du focus ?

Exemple 4 : que se passe-t-il si le window.open() n'est pas la conséquence directe d'une action de l'utilisateur, mais est généré par un code javascript plus ou moins complexe (dans un setTimeout ? suite à une requête AJAX ? etc.) ?

Etc.

Exemple de code foireux (si on clique sur le bouton "Beurk", la fenêtre ne s'ouvre pas si l'utilisateur bloque les popups de manière basique, alors que si on clique sur "Miam", la fenêtre s'ouvre "dans la plupart des cas") :

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=1.0,user-scalable=yes">
</style>
</head>
<body>
<h1>Open/Close me</h1>
<script>
function magic()
{
	window.open('https://forum.alsacreations.com', 'alsacreations');
}
</script>
<button onclick="setTimeout(magic,1000);">Beurk</button>
<button onclick="window.open('https://forum.alsacreations.com', 'alsacreations');">Miam</button>
</body>
</html>


Sans tester un code donné (et éventuellement sans savoir ce que l'utilisateur utilise), je ne sais pas répondre à toutes ces questions "a priori".

Donner une recette qui marcherait à tous les coups est difficile. C'est du cas par cas tellement il peut y avoir d'effets de bord (selon moi).

B) En ce qui concerne la fermeture d'une fenêtre via javascript

Si tu es dans un cas simple (window.open() suite à un clic de l'utilisateur sur un bouton, et en supposant que l'utilisateur se contente d'un bloquage de popup "courant"), tester window.opener dans le javascript pour faire apparaitre ou non un bouton "fermer" semble fonctionner.

Amicalement,
Merci de ta réponse
Je pense qu’il y a une grande différence entre: les sites qu’on est OBLIGÉ d’utiliser, par exemple réserver une place de train, et les sites qu’on DÉSIRE visiter parce que nous sommes demandeurs de leur contenu.
J’ai la chance de n’avoir à m’occuper que des sites du deuxième type, ce qui simplifie beaucoup mon boulot. Si les gens VEULENT voir le contenu d’un objet en cliquant sur un lien, ils ne vont pas interdire les popups sur ce site. C’est sans doute pour ça que je n’ai jamais eu de problème avec cette fonctionnalité.
Dans le cas qui a motivé ma question, la page peut s’affIcher soit directement à partir d’un lien dans un courriel, soit dans une fenêtre popup, soit dans un <iframe>. Dans le premier cas il n’y a pas de bouton, dans le 2ème cas il y a un bouton qui ferme la fenêtre, dans le 3ème cas le bouton "cache" l’<iframe>. En détectant le contexte, j’arrIve maintenant à distinguer les 3 cas et à générer ou non le bouton et lui mettre un EventListener approprié.
Modifié par PapyJP (05 Mar 2019 - 18:49)
PapyJP a écrit :

Je pense qu’il y a une grande différence entre: les sites qu’on est OBLIGÉ d’utiliser, par exemple réserver une place de train’ et les sites qu’on DÉSIRE visiter parce que nous sommes demandeurs de leur contenu.


Très bon résumé... Smiley winner