1. #1
    Candidat au Club
    Inscrit en
    novembre 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : novembre 2007
    Messages : 6
    Points : 2
    Points
    2

    Par défaut [DOM] Récupérer le contenu XML affiché dans une Iframe

    Bonjour,

    je suis nouveau sur le forum et je sollicite votre aide à propos d'un problème pour lequel je ne trouve pas de solution (ni sur Google, ni grace à l'outil de recherche du forum).

    Mon problème est très simple : je voudrais récupérer l'arbre XML DOM d'un document XML affiché dans une Iframe et ceci en javascript bien sur.

    Voici le XML qui s'affiche dans mon Iframe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
      <message type="PFW_ajax_message" version="3">
        <header>
          <error_code id="error">0</error_code>
        </header>
        <body>
          <XML_content>OK</XML_content>
        </body>
      </message>
    Avec Firefox, Safari, Opéra, pas de problème je fais :

    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
     
    <html>
      <head> 
        <title>XML dans Iframe</title> 
      </head>	
      <body>
        <iframe id="ifr" src="./xml.php" width="400" height="400"></iframe>
        <br/>
        <input type="button" value="Click me!" onclick="getXML()" />
        <script language="Javascript">
          function getXML()
          {  
            alert(document.getElementById('ifr').contentDocument.firstChild.nodeName);
          }
        </script>
      </body>
    </html>
    Et la pas de problème j'ai bien "message" qui s'affiche dans ma boite de dialogue.

    Avec IE par contre je n'y arrive pas, ni avec "contentWindow.document" ni avec "contentDocument".

    Comment feriez vous ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    février 2006
    Messages
    3 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2006
    Messages : 3 651
    Points : 4 755
    Points
    4 755

    Par défaut

    as tu essayé avec un document.getElementById('ifr').innerHTML ??
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  3. #3
    Candidat au Club
    Inscrit en
    novembre 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : novembre 2007
    Messages : 6
    Points : 2
    Points
    2

    Par défaut

    En fait la spécificité de mon problème tient au fait que le document affiché dans l'iframe et un document XML (Content-Type: text/xml).

    Du coup je ne peux pas récupérer le contenu de mon iFrame grace à innerHTML.

    Quelqun aurait-il une autre idée ?

  4. #4
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    février 2006
    Messages
    3 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2006
    Messages : 3 651
    Points : 4 755
    Points
    4 755

    Par défaut

    et avec documentElement ??
    sinon pourquoi charger ton xml dans une iframe ?
    créer un document xml en javascript exemple pour ie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var xml = new ActiveXObject("Msxml2.DOMDocument.4.0");
    xml.async = false ;
    xml.load("urldetonfichier.xml");
    var monDocument = xml.documentElement ;
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  5. #5
    Candidat au Club
    Inscrit en
    novembre 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : novembre 2007
    Messages : 6
    Points : 2
    Points
    2

    Par défaut

    Alors à la question pourquoi charger le XML dans un Iframe, c'est parce que je fais de l'upload "pseudo Ajax" de fichier dans une iframe cachée.

    Le XML affiché dans l'Iframe contient des informations sur le traitement qui a été réalisé sur le serveur et que je dois réinterpréter en Javascript.

    C'est un cas très particulier pour lequel ton code suivant ne m'est d'aucune utilité.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    New ActiveXObject("Msxml2.DOMDocument.4.0");
    xml.async = false ;
    xml.load("urldetonfichier.xml");
    Par contre tu proposes d'utiliser "documentElement". Comment pourrai-je m'y prendre ?

    Merci pour ton aide.

  6. #6
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    février 2006
    Messages
    3 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2006
    Messages : 3 651
    Points : 4 755
    Points
    4 755

    Par défaut

    et pourquoi n'utilises tu pas de l'ajax ,pour récupérer le document sous forme xml plutot que de le charger dans une iframe ???

    sinon en méthode barbare :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById("contenantIframe").getElementsByTagName("iframe")[0].contentDocument.documentElement.innerHTML
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  7. #7
    Candidat au Club
    Inscrit en
    novembre 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : novembre 2007
    Messages : 6
    Points : 2
    Points
    2

    Par défaut

    Merci pour ton aide, toutefois il faut bien comprendre plusieurs choses :

    - premièrement mon problème porte sur la récupération d'un objet XML DOM dans une iframe sous IE. Quelqu'un connait-il une solution pour y remédier ? Le problème ne porte pas sur la récupération d'un XML distant au moyen d'un ActiveX ni sur des méthodes AJAX qui permettraient de faire la même chose (auquel cas je serai tenté de dire que ce ne serait pas un problème puisque c'est très facile a réaliser).

    - de plus l'exemple que j'ai donné ne sert que de base à la mise en oeuvre de ma problématique qui est je le rappelle : la récupération d'un objet XML DOM de la page XML affichée dans une iframe et ce depuis la page contenant cette iframe en javascript et sous IE.

    - cet exemple n'est en aucun cas représentatif de la fonctionnalité globale que je suis en train de développer (à savoir un upload "pseudo AJAX" de fichier en Javascript)

    Je ne cherche donc pas des conseils pour faire autrement, je cherche une solution pour répondre à mon problème qui est pourtant simple (au vu de la facilité avec laquelle on peut le résoudre sous tous les navigateurs autre que IE, je ne peux pas croire qu'il ne soit pas possible de faire la même chose avec Internet Explorer)

    Encore un fois merci pour votre aide.

  8. #8
    Candidat au Club
    Inscrit en
    novembre 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : novembre 2007
    Messages : 6
    Points : 2
    Points
    2

    Par défaut

    Autre chose, j'ai bien évidemment testé le code que tu m'as soumi et il s'avère qu'il ne fonctionne pas sous IE car selon moi l'attribut "contentDocument" n'existe pas sur les objets iframe sous IE (Il existe sur tous les autres navigateurs).

    Pour IE il faut utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    document.getElementById("contenantIframe").getElementsByTagName("iframe")[0].contentWindow.document

  9. #9
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    février 2006
    Messages
    3 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2006
    Messages : 3 651
    Points : 4 755
    Points
    4 755

    Par défaut

    ok , j'ai trouvé ( après maintes recherche ... )
    en admettant que tu n'es QU'UNE seule iframe dans ta page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var  contenu = document.getElementsByTagName("iframe")[0].contentWindow.document.XMLDocument;
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  10. #10
    Candidat au Club
    Inscrit en
    novembre 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : novembre 2007
    Messages : 6
    Points : 2
    Points
    2

    Par défaut

    Mille merci.

    Un peu incrédule au début de notre discussion, je l'avoue, j'ai sauté au plafond quand grâce à ta solution j'ai réussi à afficher le nom de la racine de mon document XML.

    Ta solution réponds exactement à mon problème.

    Encore merci pour ton aide.

    (Au fait comment je fais pour marquer ce Thread en résolu ?)

  11. #11
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    février 2006
    Messages
    3 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2006
    Messages : 3 651
    Points : 4 755
    Points
    4 755

    Par défaut

    je t'en pris
    ( tu as juste a cliquer sur le bouton résolu )
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/11/2013, 21h12
  2. Réponses: 4
    Dernier message: 02/07/2012, 10h17
  3. Récupérer le contenu de TextInput dans une Grid
    Par guigui-in-the-place dans le forum Qt Quick
    Réponses: 4
    Dernier message: 13/10/2011, 00h36
  4. Récupérer la valeur s'affichant dans une url
    Par boubout dans le forum PHP & MySQL
    Réponses: 4
    Dernier message: 02/03/2010, 23h32
  5. récupérer ce qui est affiché dans une combobox ?
    Par Sefrou dans le forum VBA Access
    Réponses: 2
    Dernier message: 11/01/2009, 20h37

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