2017-08-05 1 views
0

J'ai un foreignObject dans un élément SVG. Tous les autres éléments s'affichent, mais le foreignObject est invisible avec son contenu. Testé dans Chrome, Firefox et Edge, tous avec le même résultat.SVG foreignObject ne montre pas sur n'importe quel navigateur, pourquoi?

Voici le code:

<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="v-2" width="100%" height="100%"> 
    <g id="v-3" class="joint-viewport" transform="matrix(1,0,0,1,-1597.0002028000001,95.99995439999998)"> 
     ... 
     <g id="j_29" model-id="e8dbd7a4-5d3d-44e5-85a0-09413112a39b" class="joint-theme-default joint-cell joint-type-html joint-type-html-element joint-element" data-type="html.Element" fill="#ffffff" stroke="none" transform="translate(1898.0001898,268.0000346)"> 
      <g class="rotatable" id="v-206"> 
       <rect class="body" id="v-207" stroke="none" fill-opacity="0" fill="#ffffff" width="100" height="60"></rect> 
       <text class="label" id="v-208" font-size="14" y="0.8em" display="none" xml:space="preserve" fill="#000000" text-anchor="middle" font-family="Arial, helvetica, sans-serif" transform="matrix(1,0,0,1,125,20)"> 
        <tspan id="v-209" class="v-line v-empty-line" dy="0em" x="0" style="fill-opacity: 0; stroke-opacity: 0;">-</tspan> 
       </text> 
       <foreignObject requiredExtensions="http://www.w3.org/1999/xhtml" width="100%" height="100"> 
        <body xmlns="http://www.w3.org/1999/xhtml"> 
         <input xmlns="http://www.w3.org/1999/xhtml" type="text" value="I'm HTML input"> 
        </body> 
       </foreignObject> 
      </g> 
     </g> 
    </g> 
    <defs id="v-4"></defs> 
</svg> 

Q: Qu'est-ce que que je fais mal?

MISE À JOUR: Je remarqué quelques petites choses:

  • ajoutant xmlns="http://www.w3.org/1999/xhtml" à l'entrée en fait afficher sur Edge. Sur les autres navigateurs, il est toujours invisible.
  • Sur Chrome, si j'édite l'élément <g> externe en sélectionnant «Modifier au format HTML», mais n'apporte aucune modification et quitte le mode d'édition, l'entrée s'affiche.
  • en ajoutant requiredExtensions="http://www.w3.org/1999/xhtml" à l'étiquette foreignObject et/ou l'étiquette de corps ne fait aucune différence.

Je dois manquer quelque chose ...

+1

Comment créez-vous ceci? On dirait que c'est dans l'espace de noms html plutôt que dans l'espace de noms SVG. BTW s'il vous plaît ne pas poster des photos de code, code postal comme texte. –

+0

@RobertLongson Salut, merci pour la réponse. J'ai mis à jour le message avec le code. Il a des blocs de mouvement, mais ils sont tous similaires, donc je les ai dépouillés et laissé juste le problème. –

+0

Si je supprime les attributs de transformation (de sorte que foreignObject est à l'écran), OK s'affiche pour moi. –

Répondre

0

L'astuce est de supprimer requiredExtensions="http://www.w3.org/1999/xhtml de l'étiquette foreignObject. Chrome n'affiche aucun contenu lorsque cet attribut est présent, mais lorsqu'il est supprimé, il fonctionne sur Chrome, IE et Firefox. Malheureusement, j'ai frappé un autre bug sur Chrome (où il rend le contenu de l'entrée dans un endroit étrange lorsque le texte déborde), donc je n'utiliserai plus foreignObjects pour cela, mais juste au cas où quelqu'un est bibelots, c'est comme ça J'ai travaillé autour du problème initial.