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 :

Accéder un élément XML présent comme plugin dans une page HTML


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Par défaut Accéder un élément XML présent comme plugin dans une page HTML
    Bonjour,

    Dans ma page XHTML j'ai une balise embed qui a comme source un fichier XML pour créer des entités SVG.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <embed src="image.svg" width="1000" height="1000" type="image/svg+xml" pluginspage="http://www.adobe.com/svg/viewer/install/" />
    J'ai donc des éléments SVG comme plugin dans ma page. Je veux accéder à ces éléments SVG et leur associer des événements en l'occurrence l'événement onclick.
    Voici le fichier xml (*.svg)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version='1.0' standalone='no'?>
    <!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
    <svg style='cursor:crosshair' width='1000' height='1000' version='1.1' xmlns='http://www.w3.org/2000/svg'>
    <path fill='lightsteelblue' stroke='midnightblue' stroke-width='5' d='M 10 10 L 10 20 20 20 20 15 Z '/>
    <path fill='lightsteelblue' stroke='midnightblue' stroke-width='5' d='M 100 100 L 150 100 200 300 100 350 Z '/>
    <path fill='lightsteelblue' stroke='midnightblue' stroke-width='5' d='M 50 500 L 100 650 65 800 20 700 Z '/>
    </svg>
    Ce fichier est créé avec PHP suite à des requêtes.
    Pour attacher l'événement onclick à l'élément svg, j'ai créé un script JS qui permet d'accéder au document SVG. Le voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function loadXMLDoc(dname)
    {
    if (window.XMLHttpRequest)
      {
      xhttp=new XMLHttpRequest();
      }
    else
      {
      xhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xhttp.open("GET",dname,false);
    xhttp.send();
    return xhttp.responseXML;
    }
    Ensuite j'accède au SVG dans un script JS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var doc =loadXMLDoc("image.svg");
    				var svg = doc.getElementsByTagName("svg")[0];
    Finalement, je traite les instructions à exécuter dans le cas d'un click sur la balise svg (affichée sur ma page)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    svg.addEventListener("click", function() {...},false);
    Lorsque je clique sur le svg : RIEN !

    Je ne sais pas où est l'erreur ...

  2. #2
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    niet niet niet
    lorsque tu fait un embed tu donne la main à un plugin qui charge le SVG
    lorsque tu fait un loadXMLDoc tu charge une deuxième fois le svg
    tu as donc deux DOM SVG celui qui est dans le plugin et celui qui est dans ton doc principal (chargé par loadXMLDoc)

    j'imagine que tu utilise un plugin comme celui-d'adobe ou le composant interne de FireFox ou de webKit

    je te conseille de lire la doc de ses plugin pour savoir comment accéder au dom du SVG chargé car c'est le seul moyen d'inter agir avec le SVG qui s'exécute

    le principe est le suivant mettre un id sur le embed
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <embed scr='my.svg' id='mySVG' ....>
    puis dans le javascript récupérer le dom généré par le plugin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    mySvgDom=document.getElementById('mySVG').getSVGDocument();
    //accéder à un élément du dom SVG
    myRect=mySvgDom.getElementById('aRect');
    //ajouter onclick su le rect
    myRect.addEventListener("click", function() {...},false);
    ceci est le principe de base mais ça dépend surtout du plugin utilisé
    pour safari google chrome voir la doc de Webkit pour firefox voir la doc de mozilla
    et pour tout autre plugin voir la doc du plugin

    A+JYT

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Par défaut
    ça marche ! Merci beaucoup

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

Discussions similaires

  1. Affichage de XML grâce à du javascript dans une page HTML
    Par broise dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 30/07/2008, 10h41
  2. Réponses: 1
    Dernier message: 03/08/2007, 13h25
  3. Afficher du XML dans une page HTML
    Par MrMaze dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/12/2005, 16h50
  4. Inclure code XML dans une page HTML ?
    Par kpatoulu dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 24/10/2005, 14h59
  5. Insérer du XML dans une page HTML
    Par Shaman LizardKing dans le forum XML/XSL et SOAP
    Réponses: 14
    Dernier message: 04/05/2005, 07h27

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