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 :

[Débutant] problème objet iframe


Sujet :

JavaScript

  1. #1
    Membre éclairé Avatar de kitsune
    Inscrit en
    Décembre 2004
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 341
    Par défaut [Débutant] problème objet iframe
    Bonjour,

    Je ne m'y connais que très peu en JavaScript et j'aurai voulu écrire une ptite fonction de rechargement d'une iframe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <SCRIPT LANGUAGE="JavaScript">
     
    	function redraw()
    	{
    	   document.svg_frame.src = "lien.html";
    	   setTimeout("redraw()",2000);
    	}
    	redraw();
     
    </SCRIPT>
    Avec svg_frame étant le nom de mon iframe.
    Mais il me dit ne pas connaitre cet objet

  2. #2
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Cette écriture fonctionne si l'élément de nom "svg_frame" est un fils direct de document. Sinon, il faut spécifier le chemin d'accès complet.
    Autre solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var iframes = document.getElementsByName( "svg_frame" );
    var svg = iframes[ 0 ];
    NB : un document peut contenir plusieurs éléments ayant le même nom, ce pourquoi getElementsByName() renvoie une NodeList. Utiliiser un id (unique) est peut-être une solution plus propre ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var svg = document.getElementById( "svg_frame" );

  3. #3
    Membre éclairé Avatar de kitsune
    Inscrit en
    Décembre 2004
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 341
    Par défaut
    Merci pour ton aide

    Donc en effet, après d'autres recherches, j'ai privilégié l'utilisation de l'id de mon iframe.
    Mais est-ce qu'après ça je peux écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var svg = document.getElementById( "svg_frame" );
    svg.src= "monlien.svg";
    Car il me génére une erreur où apparemment mon svg.src donne null...

    Merci encore

  4. #4
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    L'écriture me semble correcte du point de vue du Javascript et du DOM. Quelle est l'erreur exactement ??

  5. #5
    Membre éclairé Avatar de kitsune
    Inscrit en
    Décembre 2004
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 341
    Par défaut
    heu ben une erreur style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'null' à la valeur Null ou n'est pas un objet
    Ce qui n'aide pas bcp... C'est au niveau de la ligne svg.src = "lelien.svg"...

    Merci

  6. #6
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Ca marche chez moi. Je suppose que c'est la variable svg qui vaut null ou undefined. Vérifie que tu passes le bon identifiant (attention : js est sensible à la casse !!). Sinon, mets-nous du code en ligne : la déclaration de la iframe et le code js concerné, pour qu'on se fasse une idée.

  7. #7
    Membre éclairé Avatar de kitsune
    Inscrit en
    Décembre 2004
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 341
    Par défaut
    Je sais pas si ça change quelque chose mais je suis dans une jsp.

    Mon code html complet ressemble à ça :

    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
    21
    22
    23
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
         <SCRIPT LANGUAGE="JavaScript">
     
    	function redraw()
    	{
    		var svg = document.getElementById("svg_frame");
          	svg.src= "<%=link%>";
    	   	setTimeout("redraw()",2000);
    	}
    	redraw();
     
         </SCRIPT>
    </head>
     
    <body>
      <center>
         <iframe id="svg_frame" src="<%=link%>" height="100%" width="100%" frameborder="1" scrolling="yes" />
      </center>
    </body>
    </html>
    Avec la variable link qui est une chaine de caractere que je recupere avant.
    Mais j'ai plutot l'impression que c'est une erreur liée à JavaScript plutot qu'à l'environnement que j'utilise non ?

    Merci en tout cas

  8. #8
    Membre éclairé Avatar de kitsune
    Inscrit en
    Décembre 2004
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 341
    Par défaut
    J'ai l'impression que c'est bien la ligne svg.src =".." qui ne marche pas car j'ai placé un alert dans la fonction et ça marche.

    Je pensais qu'en modifiant la valeur de l'attribut src l'iframe se rechargerait...

    Sinon y a-t-il un autre moyen ? Merci !

  9. #9
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Le jsp tourne côté serveur et fabrique une page HTML servie à ton navigateur, qui l'interprète et fait tourner le code javascript. Ici, l'erreur vient du contexte d'appel. La fonction redraw() est appelée dans la balise <head>, alors que la iframe est déclarée plus tard, dans la balise body. Conclusion : au moment de l'appel, la iframe n'est pas encore construite. En fait, l'élément HTML Document n'est pas encore valide. Il faut appeler redraw dans le onload(), car à ce moment là, le Document est disponible :
    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
         <SCRIPT LANGUAGE="JavaScript">
     
    function redraw()
    {
    var svg = document.getElementById("svg_frame");
          svg.src= "<%=link%>";
       setTimeout("redraw()",2000);
    }
         </SCRIPT>
    </head>
    <body onload="redraw()">
      <center>
         <iframe id="svg_frame" src="<%=link%>" height="100%" width="100%" frameborder="1" scrolling="yes" />
      </center>
    </body>
    </html>

  10. #10
    Membre éclairé Avatar de kitsune
    Inscrit en
    Décembre 2004
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 341
    Par défaut
    Oui effectivement ça marche mieux !

    Sauf que j'ai encore un ptit blem, c'est qu'à chaque fois qu'il recharge j'ai une fenetre JavaScript de type erreur qui me dit "Objet attendu ligne 1, column 0", est-ce qu'il me manque quelque chose ?

    Merci beaucoup

  11. #11
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Probablement, mais je ne peux pas t'en dire beaucoup plus. Tout ce que je peux dire, c'est que le code ci-dessous, corrigé d'une coquille de copier-coller dans mon post précédent, et remplaçant les appels jsp par des noms de fichier en dur, fonctionne :
    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
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.m_dtd">
    <html>
    <head>
    <script language="JavaScript">
      function redraw()
      {
        var svg = document.getElementById("svg_frame");
        svg.src= "test.svg";
        setTimeout("redraw()",2000);
      }
    </script>
    </head>
    <body onload="redraw();">
      <a href="#" onclick="redraw(); return false">Recharger le svg</a>>
      <iframe id="svg_frame" src="blank.svg" />
    </body>
    </html>
    Si tu as des erreurs, elles viennent des différences entre ce modèle et ton code. Mais là, si rien ne te saute aux yeux, il va falloir pister ligne à ligne et travailler par élimination

  12. #12
    Membre éclairé Avatar de kitsune
    Inscrit en
    Décembre 2004
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 341
    Par défaut
    Ok je vais chercher un peu là-dedans

    Merci pour ton aide !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/06/2011, 14h48
  2. [Débutant] Problème de création d'objet (ActiveX))
    Par Mat32 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 02/06/2011, 15h00
  3. Réponses: 13
    Dernier message: 01/09/2005, 15h09
  4. [débutant] Problèmes avec CRegKey
    Par Pedro dans le forum MFC
    Réponses: 4
    Dernier message: 10/11/2003, 15h28
  5. Réponses: 11
    Dernier message: 02/09/2003, 14h20

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