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 :

Refresh Iframe d'origine +2


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 101
    Points : 54
    Points
    54
    Par défaut Refresh Iframe d'origine +2
    Bonjour,
    J'ai une arborescence d'iframes pour détailler les informations que je souhaite afficher comme suit :
    Fenêtre principale
    --- Iframe if_action
    ------ Iframe PaneauGauche et Iframe PaneauDroit

    A partir du code que j'utilise dans l'Iframe PaneauDroit, je n'arrive pas à trouver la syntaxe pour faire un location.replace (url) du contenu de mon iframe if_action.

    J'ai essayé un peu tout ce que j'ai trouvé sur le web, avec opener, top, window, parent etc mais je n'y arrive pas.

    Si quelqu'un pouvait m'aider

    D'avance merci

    M.

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    Citation Envoyé par muppetshow Voir le message
    A partir du code que j'utilise dans l'Iframe PaneauDroit, je n'arrive pas à trouver la syntaxe pour faire un location.replace (url) du contenu de mon iframe if_action.
    Si les frames ne sont pas imbriquées, a priori :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    top.document.frames['if_action'].location.replace(url);
    if_action étant le name.

    A+

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 101
    Points : 54
    Points
    54
    Par défaut
    Merci E.Buzz mais ça ne va pas. J'obtiens un message indiquant que l'objet a une valeur null ou n'est pas un objet.

    En fait la mise en page que j'ai faite dans mon message initial pour l'indentation n'a pas été prise en compte. Les iframe sont bien imbriquées.
    j'ai donc :
    1) PagePrincipale.Iframe['If_Action']
    2) If_Action contient un page avec à son tour 2 Iframes PaneauGauche et PaneauDroite
    3) Depuis PaneauDroite, je voudrais faire un location.replace(url) de mon If_Action de ma page principale

    J'espère que c'est clair comme ça, sinon j'essaye autrement.

    D'avance merci pour votre aide.

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par muppetshow Voir le message
    Les iframe sont bien imbriquées.
    Dans ce cas, remplace top par parent

    top part du niveau le plus haut, alors que parent ne remonte que d'un niveau, ce qui te positionnera dans If_Action. Le reste de la syntaxe devrait, du coup, fonctionner.

    A+

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    Le reste de la syntaxe devrait, du coup, fonctionner.
    A condition bien sûr que les iframes soient toutes sur le même domaine, or si c'est le cas, quel est l'intérêt d'utiliser des iframes ?

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par Bovino Voir le message
    A condition bien sûr que les iframes soient toutes sur le même domaine
    Exact, j'aurais dû le préciser

    Par contre, la question ne se pose que pour 'if_action', me semble-t-il (il ne s'agit pas d'accéder au contenu de la dernière frame, mais d'en changer l'url).

    A+

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Arf !

    Répondu à côté. J'avais compris "modifier l'url de PaneauGauche à partir de PaneauDroite".
    Hors, c'est "modifier l'url de If_Action à partir de PaneauDroite".

    Le problème c'est que du coup, c'est bien la syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    top.document.frames['if_action'].location.replace(url);
    qu'il faut utiliser.
    Si elle ne fonctionne pas (l'objet a une valeur null ou n'est pas un objet) c'est qu'il y a autre chose ...

    On peut voir le code HTML de ta page (la principale + les iframes imbriquées) ainsi que la manière et l'endroit dont tu appelles la fonction ?

    A+

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 101
    Points : 54
    Points
    54
    Par défaut
    Merci pour vos réponses.

    J'avais déjà essayé avec parent, et ça ne fonctionne pas.
    Si j'ai bien tout compris, parent me permet de remonter au niveau supérieur.
    Dans mon cas, j'ai besoin de remonter de 2 niveaux.

    Donc, dans mon language, j'ai besoin d'une référence absolue, soit de pourvoir remonter de parent.parent (j'ai essayé aussi mais pas mieux )

    Bovino, désolé mais ta notion de même domaine m'échappe
    J'utilise des iframe car c'est le moyen l e+ simple que j'ai trouvé de pouvoir gérer des fenêtres en cascades pour afficher des détails d'infos.

    Merci

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par muppetshow Voir le message
    J'avais déjà essayé avec parent, et ça ne fonctionne pas.
    Cf. mon dernier post ci-dessus

    A+

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 101
    Points : 54
    Points
    54
    Par défaut
    Désolé pour les messages qui se sont croisés !
    Voici mon code :
    Page Machines.hta, ma page principale avec menu générale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <iframe id="if_action" name="if_action" style="PADDING-LEFT: 40px" width="95%" height="740px"></iframe>
    puis pour alimenter l'iframe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function Charge_Iframe (PageACharger)
    {     document.getElementById('if_action').src = SourceProgs + PageACharger;
    }
    Par ce biais, dans l'Iframe if_action, je charge ma page UsersPC.htas qui contient la déclaration des 2 iframe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <iframe id="paneaugauche" name="paneaugauche" style="LEFT: 1px" width="60%" height="550px"></iframe>
    <iframe id="paneaudroite" name="paneaudroite" style="LEFT: 51%" width="38%" height="550px"></iframe>
    que l'alimente pas la fonction suivante à l'aide d'un choix dans une drop down box :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function AfficheUsers ()
    {	var idx = document.getElementById("NomUser").selectedIndex;
    	document.getElementById('PaneauGauche').src = "UsersCnx.htas?User=" + document.getElementById("NomUser").options[idx].text;
    	document.getElementById('PaneauDroite').src = "UsersCnx.htas?ID=" + document.getElementById("NomUser").options[idx].value;
    }
    Enfin, j'ai ma page UsersCnx.htas?ID=xxx qui me permet de récupérer un lien comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href=\"javascript:MenuMachine('" + rs.fields(0).Value + "')\">" + rs.fields(0).Value + "</a>
    avec mon champ rs.fields(0).value qui contient le nom de la variable avec laquelle je veux alimenter mon iframe comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function MenuMachine (Machine)
    {	// parent.frames['paneaudroite'].location.replace ("MenuMachine.htas?PC=" + Machine);
     
    	//window.frames['if_action'].location.replace ("MenuMachine.htas?PC=" + Machine);
    	top.document.frames['if_action'].location.replace("MenuMachine.htas?PC=" + Machine);
    }
    Voilà, jespère que c'est un peu plus clair pour vous.

    Sinon je pensais qu'il était peut-être possible de déclarer une fonction au niveau intermédiaire pour me permettre de lancer mon replace au niveau supérieur genre dans paneaudroite j'appel la fonction dans if_action, fonction qui fait un replace de if_action en utilisant parent ? ou un truc comme ça ?

    Merci pour votre.

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Et avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    top.document.getElementById('if_action').src


    Sinon, attention à la casse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('PaneauGauche').src
    A+

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 101
    Points : 54
    Points
    54
    Par défaut
    Merci E.Bzz

    Même résultat, 'top.document.getElementByID(...)' a la valeur Null ou n'est pas un objet avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    top.document.getElementById('if_action').src = "MenuMachine.htas?PC=" + Machine;

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 101
    Points : 54
    Points
    54
    Par défaut
    Bon, j'ai essayé une autre méthode, en passant par une fonction de la page "intermédiaire".

    Au niveau de le plus bas, j'ai donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    parent.JeMeRemplace (Machine);
    qui appelle une fonction au niveau intermédiaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function JeMeRemplace (Machine)
    {	alert ("j'y suis !");
    	// parent.frames['if_action'].location.replace ("MenuMachine.htas?PC=" + Machine);
    	// top.document.getElementById('if_action').src = "MenuMachine.htas?PC=" + Machine;
    	// top.document.frames['if_action'].location.replace ("MenuMachine.htas?PC=" + Machine);
    }
    L'appel à la fonction fonctionne bien, par contre aucune des 3 syntaxes que j'ai essayé ne fonctionne pour remonter d'un niveau !
    Toujours la même erreur objet null etc !!!

    Différence entre frame et iframe ?

  14. #14
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    C'était ma suggestion suivante ...

    Remonte ta fonction d'un niveau (il faudra l'appeler avec top. ) et appelle-là via un setTimeout().
    En effet il est possible que le problème soit dû au fait que tu essayes de recharger la page qui est entrain d'exécuter le script. Le setTimeout() devrait corriger ce point.

    Au fait, tu ne nous as pas donné de confirmation suite à la remarque de Bovino : les pages contenues dans les iframes sont bien toutes du même domaine ? (en gros : sont-elles toutes "à toi" ou y at-t-il des sites externes, c'est à dire, pour simplifier, dont le début de l'url est différent)

    Sinon, d'un point de vue syntaxe Javascript, pas de différences entre frames et iframes

    A+

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 101
    Points : 54
    Points
    54
    Par défaut
    Je en m'en sors pas, quel boulet

    En fonction des tests que je fais, j'oscile entre Cet object ne gère pas cette propriété ... ou l'objet a une valeur null ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    setTimeout (parent.Charge_Iframe ("MenuMachine.htas?PC=" + Machine, 1000));
    J'ai aussi essayé de cascader 2 appels successifs pour remonter d'un cran à chaque fois mais non.

    En fouillant, je suis tombé sur un site british ou un gars explique que href n'ira pas et qu'il faut utiliser onclick pour ça ... pas mieux, je remonte toujours d'un cran mais pas de 2.

    Sinon désolé, je n'avais pas compris la question. Oui, toutes les pages sont bien locales.

  16. #16
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par muppetshow Voir le message
    En fouillant, je suis tombé sur un site british ou un gars explique que href n'ira pas et qu'il faut utiliser onclick pour ça ...
    Ce qu'il voulait peut être dire, c'est qu'un href (s'il est mal géré) peut te faire changer de page alors que ce n'était pas prévu.
    Au lieu de
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="javascript:une_fonction();">Click me</a>
    il est préférable de faire
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="une_url" onclick="une_fonction(); return false;">Click me</a>
    Le return false empêche l'appel au href et donc le changement de page intempestif.
    Mais ça ne change rien à la syntaxe du code de la fonction appelée.
    Citation Envoyé par muppetshow Voir le message
    pas mieux, je remonte toujours d'un cran mais pas de 2.
    Je t'avais suggéré top et je vois parent.

    On peut voir la version actuelle de ton code ?
    (les même passages que dans ton post #10)

    A+

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 101
    Points : 54
    Points
    54
    Par défaut
    S'il n'y a pas top c'est que j'ai un peu tout essayé
    Donc mon code à l'heure actuel est :
    Page principale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    function Charge_Iframe (PageACharger)
    {	document.getElementById('if_action').src = SourceProgs + PageACharger;
    }
     
    avec
     
    <iframe id="if_action" name="if_action" style="PADDING-LEFT: 40px" width="95%" height="740px"></iframe>
    Ensuite, dans ma page dans if_action

    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
    18
    19
    20
     
    function JeMeRemplace (Machine)
    {	alert ("j'y suis !");
    	// parent.frames['if_action'].location.replace ("MenuMachine.htas?PC=" + Machine);
    	// top.document.getElementById('if_action').src = "MenuMachine.htas?PC=" + Machine;
    	// setTimeout (parent.Charge_Iframe ("MenuMachine.htas?PC=" + Machine, 1000));
    	setTimeout (top.Charge_Iframe ("MenuMachine.htas?PC=" + Machine, 1000));
    	// setTimeout (top.document.frames['if_action'].location.replace ("MenuMachine.htas?PC=" + Machine), 1000);
    }
     
    avec toujours 
     
    <body>
    ...
    ...
    	<iframe id="paneaugauche" name="paneaugauche" style="LEFT: 1px" width="60%" height="550px"></iframe>
    	<iframe id="paneaudroite" name="paneaudroite" style="LEFT: 51%" width="38%" height="550px"></iframe>			
     
    ...
    </body>
    et enfin dans la page chargée dans l'iframe paneaugauche, le code d'appel est maintenant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href=\"#\" onclick=\"parent.JeMeRemplace ('" + rs.fields(0).Value + "')\">" + rs.fields(0).Value + "</a>
    A la place de ce dernier, j'ai essayer de mettre top.Charge_Iframe mais sans succès.

    Wouali woualou

  18. #18
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Au lieu de , appelle directement le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setTimeout(top.Charge_Iframe (...
    Et n'oublie pas le return false; (cf. mon exemple) dans le onclick du href, sinon la page se recharge intempestivement ...

    A+

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 101
    Points : 54
    Points
    54
    Par défaut
    Bonjour,
    E.bzz, merci beaucoup pour ton aide et ta patience

    J'obtiens un message d'erreur qui me dit que que l'appel d'une fonction Sub n'admet pas de parenthèse à une ligne qui n'a absolument rien à voir !

    Mon code est maintenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href=\"#\" onclick=\"setTimeout(top.Charge_Iframe ('MenuMachine.htas?PC=" + rs.fields(0).Value + "'),1000); return false;\">" + rs.fields(0).Value + "</a>
    J'ai essayé sans le setTimeout et là j'obtiens cet objet en gère pas cette propriété ou cette méthode !!!

    Donc si je comprends un peu, la fonction passée en paramètre n'accepterait pas elle même les paramètres ?

    Est-ce que tout cela pourrait venir du fait que mes pages sont des .htas et pas des .html ?

  20. #20
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par muppetshow Voir le message
    J'obtiens un message d'erreur qui me dit que que l'appel d'une fonction Sub n'admet pas de parenthèse à une ligne qui n'a absolument rien à voir !
    Ne serait-ce pas un problème d'imbrication de quottes ou autre ?
    En effet, il n'y a pas de Sub (procédure) en Javascript, ce qui me fait plus penser à un message d'erreur serveur ...

    A+

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Fonction refresh Parent iframe
    Par voyageurdumonde dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/09/2011, 00h51
  2. refresh automatique d'un iframe
    Par amoula84 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 13/05/2009, 08h15
  3. Probleme de Refresh avec TQuery et DBGrid
    Par insoo dans le forum C++Builder
    Réponses: 7
    Dernier message: 25/11/2003, 17h20
  4. Réponses: 2
    Dernier message: 23/12/2002, 20h34
  5. Sortir d'un progamme qui boucle ou qui refresh
    Par mikevador02 dans le forum C
    Réponses: 12
    Dernier message: 14/12/2002, 09h38

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