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 :

[DOM] Pop up


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 14
    Par défaut [DOM] Pop up
    Bonjour,

    J'ai un petit problème de gestion de pop up :

    Je crée une pop up avec fenetre = window.open(...), j'ai accès au sous objet document de fenetre, mais pas aux méthodes de celui-ci, tel que getElementById(..) qui me renvoie null alors que l'id existe (vérifié par Dom Inspector).

    Voila le code javascript pour plus de détail :
    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
    function OuvrirPopup(page,nom,largeur,hauteur,options){
    // on cherche à positionner la pop-up au centre de l'écran.
      var top=(screen.height-hauteur)/2;
      var left=(screen.width-largeur)/2;
      //on ouvre la pop-up avec les options choisies.
      fenetre = window.open(page,nom,"top="+top+",left="+left+",width="+largeur+",height="+hauteur+","+options);
      return fenetre;
    }
     
    function Imprimer(page,nom){
    	fenetre = OuvrirPopup(page,nom,document.getElementById("Corps").offsetWidth,document.getElementById("Corps").offsetHeight,"menubar=no, scrollbars=no, statusbar=no, resizable=no");
    //	alert(fenetre.document);//.getElementById("Corps").innerHTML="erf";
    	fenetre.print();
    	fenetre.close();
    //	fenetre.document.getElementById("Corps").style.marginLeft = "Opx";
    }
    Merci d'avance pour votre aide.

  2. #2
    Expert éminent

    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
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fenetre.document.getElementById("Corps").style.marginLeft = "Opx";
    Si tu mets un 0 (zéro) au lieu de la lettre "O", ça devrait marcher mieux

    Sinon la syntaxe est bonne, y compris pour les méthodes ...

    A+

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 14
    Par défaut
    Merci, mais le problème ne viens pas de la en fait, même en remplaçant le fameu "O" par un 0 (mode boulet ^^).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function Imprimer(page,nom){
    	fenetre = OuvrirPopup(page,nom,document.getElementById("Corps").offsetWidth,document.getElementById("Corps").offsetHeight,"menubar=no, scrollbars=no, statusbar=no, resizable=no");
    	fenetre.document.getElementById("Corps").style.marginLeft = "0px";
    	fenetre.print();
    	fenetre.close();
    }
    En fait la ligne fenetre.document.getElement... le fait bloquer (erreur classique quand problème avec le javascript) : il continue donc pas pour executer fenetre.print() et fenetre.close() (qui fonctionnent si je retire la ligne problèmatique).

    Je ne comprend vraiment pas ce qui ne va pas.

  4. #4
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    bonjour,

    et en déclarant ta variable fenetre dans chacune de tes fonctions ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 14
    Par défaut
    Non, ca ne change rien, merci quand même.

  6. #6
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Il faut attendre que ta page soit chargée avant d'accèder aux éléments de ton pop-up !!

    En effet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fenetre = window.open("page.htm","","");
    renvoit bien un objet fenêtre... Mais, ta page met un certain temps à ce charger, ce n'est pas instantanné. Donc si tu fais dans une même fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var fenetre, elmt;
    fenetre = window.open("page.htm","","");
    elmt = fenetre.document.getElementById("idElement");
    La fenêtre s'ouvre et ta variable fenêtre contient un objet window. Mais rien ne dit que les éléments contenus dans cette page soient tous chargés lors de l'appel de getElementById()

    Regarde la pièce jointe du script 1 de cette discussion
    J'ouvre la fenêtre fille, puis lorsque la fenêtre fille est chargée (événement onload) je mets une variable de la fenêtre mère à true (cf. fonction charge() du fichier varFilleMere.htm). Et dans ce cas, je peux transférer des infos de la fenêtre mère vers la fenêtre fille...

  7. #7
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Dans ton cas, intègre la fonction d'impression dans la pop-up :

    fenetre parent :
    Code html : 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    <html>
    <head>
    <title></title>
     
    <script type="text/javascript">
    <!--
    var fenetre = null;
     
    function OuvrirPopup(page,nom,largeur,hauteur,options)
    {
      // on cherche à positionner la pop-up au centre de l'écran.
      var top=(screen.height-hauteur)/2;
      var left=(screen.width-largeur)/2;
     
      //on ouvre la pop-up avec les options choisies.
      fenetre = window.open(page,nom,"top="+top+",left="+left+",width="+largeur+",height="+hauteur+","+options);
    }
     
     
    function Imprimer(page,nom)
    {
     var corps = document.getElementById("corps");
     OuvrirPopup(page,nom,corps.offsetWidth,corps.offsetHeight,"menubar=no, scrollbars=no, statusbar=no, resizable=no");
    }
     
    //-->
    </script>
     
    </head>
     
    <body>
     
    <div id="corps" style="width: 100px; height: 100px">
    bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
    </div>
     
    <input type="button" value="Bouton" id="idButton" onclick="Imprimer('test.htm', 'test')" />
     
    </body>
     
    </html>

    test.htm
    Code html : 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
    24
    25
    26
    27
     
    <html>
    <head>
    <title></title>
     
    <script type="text/javascript">
    <!--
    function imprime()
    {
       document.getElementById("corps").innerHTML = window.opener.document.getElementById("corps").innerHTML;
       print();
       close();
    }
     
    //-->
    </script>
     
    </head>
     
    <body onload="imprime()">
     
    <div id="corps">
    </div>
     
    </body>
     
    </html>

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 14
    Par défaut
    Ca marche merci beaucoup, il fallait donc attendre le chargement de la page en effet.
    Pour ceux que ca interesse voici la fonction à la fin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //fonction pour lancer l'impression d'une page.
    function Imprimer(page,nom){
    	fenetre = OuvrirPopup(page,nom,document.getElementById("Corps").offsetWidth,document.getElementById("Corps").offsetHeight,"menubar=no, scrollbars=no, statusbar=no, resizable=no");
    	//quand la page est chargée on va modifier margin-left du Corps.
    	fenetre.onload = 
    	function(){
    		fenetre.document.getElementById("Corps").style.marginLeft = "0px";
    		//on attend 500 ms que la page se charge pour voir l'affichage avant de lancer l'impression.
    		setTimeout("fenetre.print(); fenetre.close();",500);
    	}
    }

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 14
    Par défaut
    Hmm zut, je croyais le problème éridaqué, mais un internet explorer resiste encore et toujours à l'éradication des bugs :p.

    Donc mon problème à nouveau c'est le même qu'auparavant, mais seulement sous internet explorer, c'est à dire qu'il ne me trouve pas l'element demandé (fenetre.document.getElementById("Corps")).

    Quelqu'un aurait-il une solution svp?

  10. #10
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    regarde le code j'ai fait dans le message #7 : il fonctionne très bien sous IE et Firefox.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 14
    Par défaut
    Oui, je vois que ta méthode marcherai sans problème avec ie, mais l'inconvénient c'est qu'il me faudrai recréer une page en fait, tandis que moi je me contente de rappeler la même dans une popup, mais sans inclure les en-tete, menu et pied-de-page.

    Donc cela me ramene au même css que je souhaite modifier par javascript (ce qui marche bien sous firefox).

  12. #12
    Membre chevronné Avatar de mathieugamin
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 572
    Par défaut
    Salut,
    Pour IE j'ai eu le problème des variables top et left.
    Le script fonctionne très bien sous FF, mais sous IE cela bloque.

    Si tu renommes tes variables top et left en haut et gauche, tu ne devrais plus avroi de soucis avec IE...

    Bon courage !

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 14
    Par défaut
    Merci Mathieu, mais j'ai essayé et ca ne viens pas de la :p.

Discussions similaires

  1. Pop-up d'une dialog box a partir d'un bouton
    Par bobbyjack dans le forum MFC
    Réponses: 21
    Dernier message: 13/09/2005, 15h32
  2. XML DOM et gros fichiers
    Par Manu_Just dans le forum APIs
    Réponses: 4
    Dernier message: 28/03/2003, 09h50
  3. [DOM/SAX]Choix...
    Par miss8 dans le forum APIs
    Réponses: 4
    Dernier message: 17/03/2003, 18h37
  4. pb formatage document XML généré par un dom tree
    Par lionel69 dans le forum APIs
    Réponses: 11
    Dernier message: 17/10/2002, 09h53
  5. Réponses: 3
    Dernier message: 04/09/2002, 09h42

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