IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Problème d'ancre lors du rafraichissement d'un opener dans une frame


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 18
    Par défaut Problème d'ancre lors du rafraichissement d'un opener dans une frame
    Bonjour,

    Je cherche à actualiser une page qui se trouve dans une frame grâce à une popup.

    Donc ma page qui appelle la popup (et par la même celle que je dois rafraichir) contient le code suivant, pour l'ancre et l'appelle de la popup.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <a name="microConnect" id="microConnect">
    <h3>Micro connect&eacute; : 
    	<?php
            if ($droitModif) {
                    echo '<a href="raip/indexMicro.php?RNE='.$rne.'"
                             onclick="popup(this.href,\'500\',\'320\'); return false;">
                             Ajouter des micros connect&eacute;s</a>';
            }
            ?>
    </h3>
    </a>
    Ensuite, dans la page indexMicro.php, il a un formulaire, qui une fois valide envoie vers la page pour insérer les données dans la base de données. A la fin de cette page j'ai mis le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <script type="text/javascript">
    	if (window.opener.location.hash != "#microConnect" ) {
    		window.opener.location.href = window.opener.location.href+ "#microConnect";
    	}
    	window.opener.location.reload();
    	self.close();
    </script>
    Ce code marche parfaitement sous Firefox et met bien l'affichage au niveau de l'ancre. Sous IE, la page est actualisée mais ne va pas à l'ancre. J'ai fait un alert de 'window.opener.location.href' de la page rechargée et l'ancre se trouve bien dans l'url.

    Merci d'avance

    Rawone

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    ben il y a redondance entre le href et le reload ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 18
    Par défaut
    Si je ne mets pas le reload, l'opener n'est pas réactualisé. Je suis désolé mais je ne comprends pas bien la réponse.

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    ben tu donnes une ancre et après tu fais un reload ...

    essaye ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <script type="text/javascript">
    	if (window.opener.location.hash != "#microConnect" ) {
    		window.opener.location.href = window.opener.location.href+"#microConnect?"+ new Date() ;
    	}
    	self.close();
    </script>
    code édité ...

    et puis le self. close ne focntionnera pas correctement comme ça dans la popup
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 18
    Par défaut Résolu
    bon, je viens de trouver la solution. Je ne suis pas un expert en javascript, mais je peux déjà vous dire que mon code n'est pas propre du tout

    Alors j'ai modifié une fonction de recherche et remplace trouvé sur Internet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #Cette fonction me permet de supprimer l'ancre de l'uri s'il en existe déjà une.
    function chercheRemplace( text, stringToFind, stringRemplacement) {
    		var text = text.toString() ;
    		var maReg = new RegExp( stringToFind, "gi") ;
    		var resultat = text.replace( maReg, stringRemplacement ) ;
     
    		if ( text.search( maReg ) == -1 )
    			return text;
    		else
    			return resultat ;
    	}
    Ensuite j'ai écrit dans ma popup ce code javascript (qu'il faudra que je généralise et mette dans une fonction pour que l'on passe l'ancre a insérer en paramèter)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    # je récupère l'adresse de opener
    var uri = window.opener.location.href;
    # je teste s'il existe une ancre, pour la supprimer si c'est le cas
    	if (window.opener.location.hash != "" ) {
    		var uri = chercheRemplace( window.opener.location.href,   window.opener.location.hash, '')
    	}
    # je rajoute l'ancre que je désire mettre (relance IE a l'ancre mais pas Firefox)
    	window.opener.location.href = uri+"#microConnect";
    # je relance pour Firefox ( relance Firefox a l'ancre mais ne relance IE qu'en haut de la page)
    	window.opener.location.reload();
    # je supprime l'ancre que je viens de mettre
    	uri = chercheRemplace( window.opener.location.href, window.opener.location.hash, '')
    # pour la remettre de nouveau (relance IE à l'ancre mais pas Firefox).
    	window.opener.location.href = uri+"#microConnect";
     
    	self.close();
    Je suis conscient que mon code est une abération, et si quelqu'un trouve quelque chose pour faire plus propre, je le prendrais avec plaisir.

    Merci beaucoup SpaceFrog, je n'avais pas compris ton histoire de reload hier, ca n'a fait tilt que ce matin

  6. #6
    Membre émérite
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Par défaut
    Et en faisant...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    window.location.hash = 'microConnect';
    Ca marche pas sous ie ? (ça marche avec FF)

    Sinon... .. .


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    function cleanUrl(url) 
    {
        var u = (!url) ? window.location.href : url;
        var pos = u.lastIndexOf('#');
     
        if(pos == -1)
            return u;
    	    else
    		return u.substring(0,pos);
    }
     
    window.location.href = cleanUrl(window.opener.location.href)+'#microConnect';
    @ tchaOo°

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/07/2015, 11h17
  2. Réponses: 2
    Dernier message: 18/03/2010, 13h31
  3. Réponses: 1
    Dernier message: 25/07/2007, 09h21
  4. Pb lors de l'enregistrement des sessions dans une BDD
    Par tomcoch dans le forum Langage
    Réponses: 2
    Dernier message: 17/04/2007, 10h14
  5. Réponses: 1
    Dernier message: 28/06/2006, 16h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo