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 :

Ajout d'une image SVG dans le code d'une page


Sujet :

JavaScript

  1. #1
    Membre confirmé Avatar de Mobius
    Profil pro
    none
    Inscrit en
    Avril 2005
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Avril 2005
    Messages : 463
    Points : 558
    Points
    558
    Par défaut Ajout d'une image SVG dans le code d'une page
    Bonjour,

    Je voudrais ajouter dans une page HTML une image SVG avec la contrainte suivante :
    - l'image SVG est créée dynamiquement en javascript par ma page

    Sur le principe cela parait assez simple, il suffit d'ajouter dans l'arbre DOM un noeud "svg".

    Dans la pratique l'image ne s'affiche pas dans firefox 2 (non testé avec d'autres navigateurs)

    Voici un exemple de ce que je voudrais faire :
    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
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" >
    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:svg="http://www.w3.org/2000/svg">
    <head>
    	<title>Test SVG</title>
    </head>
    <body>
    	<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="400" height="300">
    		<line x1="200" y1="0" x2="0" y2="200" stroke="black"/>
    	</svg>
    	<script type="text/javascript">
                    window.addEventListener("load", function() {
                            var body = document.getElementsByTagName("body")[0];
                            var svg = document.createElement("svg");
                            svg.setAttribute("xmlns", "http://www.w3.org/2000/svg");
                            svg.setAttribute("version", "1.1");
                            svg.setAttribute("width", "400");
                            svg.setAttribute("height", "300");
                            var line = document.createElement("line");
                            line.setAttribute("x1", 200);
                            line.setAttribute("y1", 0);
                            line.setAttribute("x2", 0);
                            line.setAttribute("y2", 200);
                            line.setAttribute("stroke", "black");
                            svg.appendChild(line);
                            body.appendChild(svg);
                    }, false);
            </script>
    	<img width="400" height="300" alt="image svg" src="data:image/svg+xml,&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; version=&quot;1.1&quot; width=&quot;400&quot; height=&quot;300&quot;&gt;&lt;line x1=&quot;200&quot; y1=&quot;0&quot; x2=&quot;0&quot; y2=&quot;200&quot; stroke-width=&quot;1&quot; stroke=&quot;black&quot;/&gt;&lt;/svg&gt;" />
    </body>
    </html>

    - La première balise svg dans le code fait bien apparaitre l'image mais n'est pas générée dynamiquement. (c'est le résultat que je voudrait obtenir)
    - Le code javascript ajoute dans l'arbre DOM le strict équivalent au premier SVG mais l'image ne s'affiche pas
    - la balise "img" correspond à une astuce que j'ai voulu tenter en ajoutant le code du svg dans la balise "src" de l'image. Résultat l'image ne s'affiche pas. Par contre si on affiche l'image a partir du menu contextuel sur l'image en question -> l'image est correctement affiché

    Si vous avez des idées, suggestions, ou tout autre information pouvant me faire avancer, merci d'avance.

  2. #2
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut Problème de namespace
    SAlut,

    La création d'un élement se fait sur un namespace. Et ajouter l'attribut xmlns a posteriori n'a pas de sens puisque l'élément est déjà créé. Il faut donc pouvoir le spécifier à la création de l'élément. C'est pourquoi le DOM2 prévoit l'utilisation d'une fonction createElementNS, le pendant de createElement. Donc voici le code qui s'applique:

    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
    24
    25
    26
    27
    28
    29
    30
    31
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" >
    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:svg="http://www.w3.org/2000/svg">
    <head>
    	<title>Test SVG</title>
    </head>
    <body>
    <!--
    	<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="400" height="300">
    		<line x1="200" y1="0" x2="0" y2="200" stroke="black"/>
    	</svg>
    -->
    	<script type="text/javascript">
    		window.addEventListener("load", function() {
    			var body = document.getElementsByTagName("body")[0];
    			var svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
    			svg.setAttribute("version", "1.1");
    			svg.setAttribute("width", "400");
    			svg.setAttribute("height", "300");
    			var line = document.createElementNS("http://www.w3.org/2000/svg","line");
    			line.setAttribute("x1", 200);
    			line.setAttribute("y1", 0);
    			line.setAttribute("x2", 0);
    			line.setAttribute("y2", 200);
    			line.setAttribute("stroke", "black");
    			svg.appendChild(line);
    			body.appendChild(svg);
    		}, false);
    	</script>
    </body>
    </html>
    Note quand même que toutes les versions de IE n'implémentent pas cette fonction du DOM2 (mais il ne gèrent pas nativement non plus le SVG...)

    ERE

  3. #3
    Membre confirmé Avatar de Mobius
    Profil pro
    none
    Inscrit en
    Avril 2005
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Avril 2005
    Messages : 463
    Points : 558
    Points
    558
    Par défaut
    Effectivement cela semble plus logique et en plus ca marche à merveille

    Merci beaucoup pour ce coup de pouce.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/10/2014, 20h17
  2. Une image en session ou comment renvoyer une image sur une page
    Par a tunar with no tune dans le forum Spring
    Réponses: 1
    Dernier message: 26/01/2012, 09h02
  3. Réponses: 3
    Dernier message: 18/11/2011, 10h19
  4. [c#] [SVG] affichage d'une image svg dans un form (pocket pc)
    Par DontNet dans le forum Windows Forms
    Réponses: 1
    Dernier message: 26/10/2007, 15h19
  5. Ajouter du code dans le code d'une feuille
    Par srame dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/04/2007, 11h05

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