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 :

[Iframe][Débutant]Iframe et taille dynamique


Sujet :

JavaScript

  1. #1
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut [Iframe][Débutant]Iframe et taille dynamique
    Bonjour,

    J'ai actuellement une IFRAME qui charge une page JSP (sur le même server), donc dynamique, donc dont on ne connait pas la taille initialement.
    Je procède ainsi :

    déclaration de l'IFRAME
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <iframe src="{emplacement/lien[last()]/lienPrincipale/text()}" name="framePrincipale" scrolling="auto" 
    frameborder="0" id="ifrm" onload="size();">
               </iframe>
    Déclaration de size()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function size()
    { 
       timeoutID = window.setTimeout("size_aux()",3000);
    }
     
    function size_aux()
    {
     document.getElementById("ifrm").style.width=document.getElementById("ifrm").contentWindow.document.body.scrollwidth;;
     document.getElementById("ifrm").style.height=document.getElementById("ifrm").contentWindow.document.body.scrollHeight;;
    }
    En clair, mon idée était d'attendre que la page JSP se charge (ca peut être assez long, j'ai pris 3 sec pour tester) et ensuite de redimensionner l'IFRAME. Apparament, cela ne marche pas.

    Suis-je dans le faux? Sur la bonne piste mais pas la bonne methode ?

    merci d'avance pour vos réponses

    mavina

  2. #2
    Membre averti Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Points : 331
    Points
    331
    Par défaut
    si tu veux acceder aux proprietes width et height

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    iframe.width
     
    document.getElementById("ifrm").width
    pourquoi via la css ca fonctionne pas, j en sais trop rien. Je pense que l IFRAME est un objet "special"?
    Mais en tous cas ça fonctionne bien.

    Voila.

    Bon courage

  3. #3
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    Alors en fait le truc c'est que mon IFrame garde la même taille apres les 3 secondes...
    Pourquoi ?

    merci

    mavina

  4. #4
    Membre averti Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Points : 331
    Points
    331
    Par défaut
    Question :
    Quand tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    var h= document.getElementById("ifrm").contentWindow.document.body.scrollHeight;
    alert ("h =" + h);
    ca te retourne bien la hauteur souhaite ?

  5. #5
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 445
    Points
    3 445
    Par défaut
    Salut,

    Inline frames may not be resized (and thus, they do not take the noresize attribute).
    Trouvé sur http://www.w3.org/TR/REC-html40/pres...es.html#h-16.5

    A priori, tu ne peux pas redimensionner une IFRAME.

    Peut-être peux-tu résoudre ton problème avec AJAX ? En mettant le contenu de ta JSP dans un DIV... Mais ça parrait compliqué quand même... Pourquoi est-ce que ton contenu change de taille ? Est-ce lié à la taille d'une image ? Si oui, tu peux le calculer coté serveur, et donc dimensionner ton IFRAME avec la bonne taille dès le départ..

    A+

  6. #6
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    quand c'est du statique, pas de soucis, sauf que ma frame n'est pas redimenssionnée.
    quand c'est du dynamique, l'alerte ne s'affiche pas, la frame n'est pas redimenssionnée.


  7. #7
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 445
    Points
    3 445
    Par défaut
    Ce que je ferais à ta place :

    - Créer un Div à la place du IFRAME
    - Au chargement de la page, faire une requete via AJAX de la taille à afficher ( peux-tu le savoir sans afficher le contenu ?? )
    - Une fois la taille récupérée, redimensionner le Div, et y inclure le contenu de la page dynamique...

    Je ne sais pas en quoi ton contenu change et qu'est-ce qui le rend dynamique, mais si tu peux connaitre la taille par avance, cette méthode fonctionnera, non ?

  8. #8
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    Je ne peux malheuresement pas dire en détail ce qu'il y a dans mes pages JSP, mais par exemple je charge dans mon IFRAME des statistiques entre deux dates qui peuvent varier, donc les tableaux peuvent être tres petits ou tres tres gros...
    Ce qui fait que je ne peux pas savoir la taille du document chargé avant de l'avoir chargé...

    mavina

  9. #9
    Membre averti Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Points : 331
    Points
    331
    Par défaut
    Mavina,
    Ce que veut dire le W3C je pense c est que par rapport au FRAMES,
    l option noresize n existe pas.
    je vais te dire comment je fais pour redimensionner mes IFRAMES.

    c est dans le code contenu dans l'IFRAME que j appelle le document parent et que je retrouve l IFRAME et lui attribue des nouvelles height et width.
    Ceci parce que le contenu de l IFRAME est le seule a connaitre la taille dans laquelle il souhaite s afficher.
    Mais il faut vraiment en avoir besoin.
    Si tu veux des precisions demande donc.

    KiLVaiDeN a raison l utilisation d un DIV qui va se redimenssionner selon le contenu est plus simple et plus efficace.
    J utilise dans IFRAME parce que j utilise deja enormement de DIV pour faire mes layers dans chaque IFRAME. Et en general la taille de mes IFRAMES est statique.

  10. #10
    Membre averti Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Points : 331
    Points
    331
    Par défaut
    Egalement je pense que l utilisation de l attribut "load" dans le tag IFRAME pose peut etre probleme. Je suis pas sur que ca existe. A mon avis c'est pas valide.
    En tous cas moi je met mon code le contenu de l IFRAME et ca fonctionne, a condition de bien appeler les bons parents avec javascript.

  11. #11
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 445
    Points
    3 445
    Par défaut
    Son problème vient du fait qu'il ne connait pas la taille.

    En fait, je pense que ton problème est un problème insolluble, car la taille "dynamique" est allouée par le navigateur, et seulement dans le cas d'une page "flottante". Tu ne peux pas récupérer cette taille par programmation, à moins d'ouvrir une fenêtre flottante avec le contenu, récupérer la taille obtenu, et modifier la taille de la zone d'affichage pour y accueillir les données.

    Pour ce genre de problème, il vaut mieux se baser sur un maximum, et toutes tes pages s'afficheront dans ce maximum que tu auras défini pour ta zone. Il y aura des espaces blancs pour les pages avec moins d'informations, mais en tout cas tu exploiteras au mieux la taille de ta zone.

    Je ne vois rien d'autre... A+

  12. #12
    Membre averti Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Points : 331
    Points
    331
    Par défaut
    Ton probleme n est pas insoluble et la solution n'est pas simple.
    Cependant je rejoins KiLVaiDeN sur le fait que or besoin tres specifiques (avec des appli avec AJAX par exemple), c est plus robuste de travailler et plus simple de travailler avec le taille maximum possible.

    Apres si c est un client qui te le demande le probleme n est pas le meme.

  13. #13
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    je vous recontacte demain quand je me repencherai sur le sujet.
    Merci encore pour vos réponses !!!

    mavina

  14. #14
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    re,

    En y regardant de plus près, comment pourrais-je utiliser une balise <div> comme vous le préconnisez ? Car <div> n'est là que pour le texte ? Ou alors je me fourvoie ?
    La balise iframe me permettait d'afficher le contenu de la page JSP...

    je ne vois pas trop où aller

    merci

    mavina

  15. #15
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    j'ai trouvé un truc sur le net, il y a une boucle for dedans :
    Le probleme c'est que le compilateur xsl me considere le < comme un début de balise, et du coup je suis un peu bloqué
    file:/oracleas/0904/oapcp00/Apache/Apache/htdocs/menu/menu.xsl; N° de ligne96; N° de colonne-1; Erreur XSLT (javax.xml.transform.TransformerConfigurationException): javax.xml.transform.TransformerException: org.xml.sax.SAXParseException: Blanc requis avant des attributs.
    quelqu'un peut m'aider ?

    merci

    mavina

  16. #16
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 445
    Points
    3 445
    Par défaut
    A la place de < tu peux mettre != dans ce cas precis

  17. #17
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    ok rebelotte une autre erreur :
    file:/oracleas/0904/oapcp00/Apache/Apache/htdocs/menu/menu.xsl; N° de ligne102; N° de colonne-1; Erreur XSLT (javax.xml.transform.TransformerConfigurationException): javax.xml.transform.TransformerException: org.xml.sax.SAXParseException: Caractère ou syntaxe de référence d'entité non valide
    cette ligne correspond à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        if ((document.all || document.getElementById) && iframehide=="no")
    de la fonction
    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
    function resizeCaller() 
    {
      var dyniframe=new Array()
      for (i=0; i!=iframeids.length; i++)
      {
        if (document.getElementById)
        resizeIframe(iframeids[i])
        //reveal iframe for lower end browsers? (see var above):
        if ((document.all || document.getElementById) && iframehide=="no")
        {
          var tempobj=document.all? document.all[iframeids[i]] : document.getElementById(iframeids[i])
          tempobj.style.display="block"
        }
      }
    }
    bien à vous, et merci pour votre aide

    mavina

  18. #18
    Membre averti Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Points : 331
    Points
    331
    Par défaut
    As tu la possiblite d utiliser un jsp:include ?

  19. #19
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    non, le menu est indépendant des jsp que je charge.

  20. #20
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 445
    Points
    3 445
    Par défaut
    Salut,

    Tu peux faire une requête via XmlHttpRequest du contenu de ton div.
    Ensuite, tu récupères la réponse, et tu t'en sers pour peupler ton div comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('id_div').innerHTML = result;
    Et ton div sera complété par ce que tu auras obtenu en retour de ton appel via XmlHttpRequest.

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

Discussions similaires

  1. Iframe et submit listes déroulantes dynamiques
    Par vince240986 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 07/04/2014, 10h31
  2. Réponses: 11
    Dernier message: 16/02/2010, 23h41
  3. [JAvaScript][IFrame][Débutant]IFrame et recupération d'adresse
    Par mavina dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 30/05/2006, 13h38
  4. [Débutant] Trouvez la taille d'une fenêtre
    Par Sharukh Khan dans le forum MFC
    Réponses: 6
    Dernier message: 06/06/2004, 22h23
  5. Réponses: 10
    Dernier message: 04/05/2004, 16h00

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