Version complète: sur le forum Webmaster Hub : Ouverture et fermeture d'une fenetre
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > Scripts et utilitaires
steph13
B'jour le Hub,

Je cherche une solution, (javascript ??) pour ouvrir une nouvelle fenêtre, tout en fermant la fenêtre courante.

Cas pratique:
J'ai une fenêtre qui s'ouvre depuis une page X.
Sur cette fenêtre, je renvoi des infos diverses.
Sur cette même fenêtre, il y a un lien "visiter le site".

Hors, je voudrais, lors du clic sur ce lien, fermer la fenêtre en cours et en ouvrir une nouvelle avec le site X ou Y.

Comment puis je faire cela ?

Merci d'avance.
Steph'

Edit:
J'ai trouvé cette solution:
<a href="http://www.site.com" target="_blank" onclick="java script:window.close()">Visiter son site</a>

Cela fonctionne très bien avec IE, mais c'est la cata avec Firefox et la navigation par onglet...
Théo B.
HTML
<a href="http://www.tonsite.com" target="_blank" onclick="java script:window.close()">Visiter le site</a>


//EDIT : en effet, ça ne marche pas sous FF.
steph13
Merci Théo, nos messages se sont croisées tongue.gif

Si quelqu'un a testé et validé quelque chose de similaire sous FF, je suis preneur.
Merci.
captain_torche
Après quelques tests et recherches, il s'avère que malheureusement, il est impossible sous Firefox de fermer une fenêtre ouverte par un utilisateur.
steph13
Bien vu captain....Merci à toi.

Bon. Bhé je vais voir autrement alors...
Dudu
Salut

L'autre problème avec les navigateurs Gecko (donc Firefox, l'antique Mozilla, Camino, Netscape etc...) est qu'il est possible de désactiver le target=_blank de sorte à ce que par défaut TOUS les liens s'ouvrent toujours dans la même fenêtre.
Çà se règle dans le about:config
Donc, avec les visiteurs qui ont réglé ce paramètre, tu risques d'ouvrir le 2ème site dans la même fenêtre, puis... de fermer la fenêtre biggrin.gif
Donc pour tous ces navigateurs, tu peux laisser tomber

L'autre problème est qu'il n'y a pas que Firefox et WinIE: Safari aussi refuse certaines fermetures de fenêtres (sur quels critères je ne sais plus, mais certainement très proches de ceux de Firefox)
Opera même chose. Quant aux autres navigateurs exploitant d'autres moteurs de rendu, c'est encore plus aléatoire.
Donc là aussi tu peux laisser tomber

Et pour en rajouter une dernière couche, le window.close agit différement selon les navigateurs: parfois il ferme juste l'onglet, parfois il ferme toute la fenêtre quelque soit le nombre d'onglets (et çà peut faire piquer des crises de nerfs à tes visiteurs). Et encore, lorsque le navigateur ferme toute la fenêtre, parfois il avertit ("attention vous allez fermer une fenêtre qui contient [x] onglets, êtes-vous sûr?"), parfois il n'avertit pas. Là encore çà dépend du navigateur et de sa version.
Bon, bien sûr dans le cas d'IE le problème des onglets ne se pose pas laugh.gif

En résumé, un window.close est à manipuler avec moultes précautions, d'autant plus que dans certains cas ce genre de techniques puisse apparaître comme intrusif wink.gif
À part dans les pop-up (et encore faut-il être sûr que le visiteur n'a pas décidé d'ouvrir le pop-up en pleine page dans un nouvel onglet, çà arrive) je ne prendrais pas le risque de mettre un window.close unsure.gif

Question idiote: si le but est de remplacer l'affichage d'un site A par un site B, pourquoi ne pas laisser le lien s'ouvrir dans la même fenêtre ? huh.gif
Ce serait moins bancal. Parce que là on dirait que tu as décidé de vivre dangereusement
Théo B.
Si la fenetre est une petite fenetre sans barre d'adresse, d'etat, ... c'est trop contraignant :nono:
captain_torche
Oui, effectivement, si c'est pour ouvrir un site en plein écran, sans barre d'adresse ni de nav qui prennent trop de place, je crains bien que ce ne soit anti-accessible.
steph13
Salut Dudu smile.gif

En fait, l'idée:
J'ai une galerie de photos des membres.
Tu cliques sur photo pour la voir en plus grand.
Je t'ouvre donc une popup.
De la, tu as un lien quite renvoi vers le site du membre...

PS: Un peu de danger parfois, c'est welcome tongue.gif wink.gif
Dudu
Joli cas d'école biggrin.gif

C'est vrai que si çà avait pu marcher partout sans poser de problèmes, la situation prêtait bien à ce genre de choses..
Cela dit, tu te risques:
- à ce que ta page de photo grand format soit ouverte pleine-page dans un nouvel onglet (on prend de plein fouet l'abus de pop-up publicitaires)
- à des incompatibilités sur certains navigateurs

Je ne vois que 3 solutions:
  • Garder ce script tel quel. Dans IE çà passera parfaitement puisqu'il n'y a pas d'onglets et que ce JS est accepté. Pour les autres, advienne que pourra: au pire ils auront un pop-up à fermer manuellement.
  • Ouvrir le site du membre toujours depuis la pop-up mais dans la fenêtre principale, donc à place de la galerie. J'imagine que tu as écarté cette hypothèse pour ne pas "perdre" des visiteurs wink.gif (faut pas s'en faire, ils reviennent)
  • Faire une "fausse pop-up" sur la page de la galerie. C'est-à-dire jouer avec du JS sur des sortes de "calques" appelés par un clic. Et afficher le lien dans cette fausse pop-up en target="_blank". Çà t'oblige à revoir ton code, c'est l'inconvénient.
Pour des exemples de fausse pop-up, tu as çà par exemple, même si çà peut ne pas correspondre exactement: SlayerOffice SlideShow
Sinon tu devrais pouvoir ton bonheur avec des librairies JS telles que Prototype, script.aculo.us ou encore Behaviour
steph13
B'jour Dudu,

En fait, j'ai opté pour quelques chose dans ce genre : Voir ici

J'ai viré le JS, sauf pour le window.close(), qui, sous FF, passe très bien. tongue.gif
Dis moi toutours ce que tu en penses.
captain_torche
Sinon, est-ce que le self.close(), ne permettrait pas de ne fermer que le document courant (plutôt que risquer de fermer la fenêtre entière) ?
steph13
Quel est la difference entre le document courant et la fenêtre?
Je ne suis pas certains de bien te suivre captain... smile.gif
Dudu
Salut,

Apparemment la solution retenue semble parfaite. Un seul détail: il semble que Firefox ne prenne pas en compte window.close() uniquement lorsque la page est dans un onglet: çà fait donc un lien inactif unsure.gif (bon ce n'est pas excessivement gênant)
Aucun problème sous Safari..

PS: pour ta dernière question: c'est, en substance, la différence entre l'onglet et la fenêtre (grosso modo). Il me semble que l'arbre DOM considère l'élement "window" comme étant la fenêtre de vue, et non comme étant la fenêtre du navigateur (qui peut, elle, contenir plusieurs pages grâce aux onglets)
steph13
B'jour Dudu...
Bon, bha si la solution adopté te semble bonne....ca devrait aller alors tongue.gif

Par contre, heu, j'ai besoin de me documenter encore la : Arbre Dom ??
Ca fait pas des fruits comestible un truc pareil non ?? laugh.gif

Fenêtre de vue et fenêtre de navigateur...oui, oui, oui...

En clair, la chose que j'ai bien compris la, c'est que je n'ai rien compris, et que j'ai encore pas mal de pain sur la planche tongue.gif

Y'a t-il un décodeur dans la salle ??
Dudu
L'arbre DOM ce n'est pas le pommier du jardin d'Eden, malheureusement wink.gif

C'est la représentation de ta page HTML en ne gardant que les balises (qui sont alors appelées des "noeuds").

Admettons une page très simpliste comme celle-ci:
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="alternate" type="application/rss+xml" title="RSS" href="rss.php" />
<title>Titre de la page</title>
<link rel="stylesheet" type="text/css" href="styles.css" media="screen,projection, print" />
<script type="text/javascript" src="functions.js"></script>
</head>
<body>
<div id="conteneur">
<h1>Titre H1</h1>
<h2>Sous-titre H2</h2>
<p>Paragraphe</p>
</div>
</body>
</html>


L'arbre DOM de cette page est celui-ci:
  • #window
    • #document
      • HTML
        • HEAD
          • META
          • LINK
          • TITLE
            • Titre de la page
          • LINK
          • SCRIPT
        • BODY
          • DIV
            • H1
              • Titre H1
            • H2
              • Sous-titre H2
            • P
              • Paragraphe
Tout çà pour dire qu'il peut y avoir une confusion entre l'objet window de l'arbre DOM, et la fenêtre du navigateur wink.gif

Quelques petits liens pour approfondir:
Référence du DOM Gecko sur le site de Mozilla. Le lien à avoir sous le coude quand on aborde le DOM.
Document Object Model sur Wikipedia. Je viens de trouver ce lien par un moteur de recherche car la documentation Mozilla reste très vague sur cette notion d'arbre. Très instructif.
Se servir du DOM pour écrire des applications concrètes en Javascript toujours sur le site Mozilla, mais cette partie là est uniquement en anglais.
D'ailleurs il est préférable de consulter la référence DOM de Mozilla dans la langue de Shakespeare, car de (trop ?) nombreux articles n'ont pas été traduits.


PS: Dans le même genre, le validateur du w3c te permet de choisir, lors de la validation d'une page, de représenter l'arbre de la page. Pour cela, il faut se rendre sur la page de validation approfondie et cocher la case "Show Parse Tree".
(à ce propos, mets tes "onmouseover" tout en minuscule en XHTML pour ne pas que le validateur hurle au scandale wink.gif)
steph13
Ah yes...
Dudu, c'est de la doc montée sur pattes !! biggrin.gif

Merci beaucoup m'sieur.
Je vais potasser cela.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.