2011-10-25 6 views
0

Je crée une zone de texte dans un foreignObject dans un SVG comme suit:<textarea> intérieur <foreignObject> poignées comme prévu dans Chrome, mais pas Firefox

var doc = document.getElementById("cover"); 
var foreign = document.createElementNS(svgNS,"foreignObject"); 
var textarea = document.createElementNS("http://www.w3.org/1999/xhtml","textarea"); 

foreign.setAttributeNS(null,"x",40); 
foreign.setAttributeNS(null,"y",40); 
foreign.setAttributeNS(null,"width",500); 
foreign.setAttributeNS(null,"height",200); 
doc.appendChild(foreign); 

textarea.setAttributeNS(null,"xmlns","http://www.w3.org/2000/xmlns/"); 
textarea.textContent = "Text goes here."; 
foreign.appendChild(textarea); 

Cela fonctionne bien dans Chrome. Cependant, dans Firefox, je ne peux pas voir le textarea du tout. Quand je vérifie avec Firebug, il existe, mais firefox a forcé le positionnement statique, et selon la façon dont je défile, la case en surbrillance de survoler l'objet dans l'onglet html n'est pas nécessairement même à l'intérieur du svg. Même quand c'est le cas, je ne peux pas voir le textarea. Que puis-je faire pour résoudre ce problème dans Firefox? Pour référence, j'utilise les dernières versions des deux navigateurs (mises à jour il y a quelques heures).

Répondre

1

Works for me si je change cette ligne:

textarea.setAttributeNS(null,"xmlns","http://www.w3.org/2000/xmlns/"); 

à ceci:

textarea.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns","http://www.w3.org/2000/xmlns/"); 

Je pense que Firefox est juste d'être plus strict sur les espaces de noms. Il pourrait être un bug, mais this indicates it's accepted d'exiger la http://www.w3.org/2000/xmlns/ pour le traitement DOM:

Le préfixe xmlns: a été défini comme un dispositif syntaxique pour déclarer namespaces, mais n'a pas été lui-même associé à un nom d'espace de noms par le janvier 1999 spécification de namespaces. Mais dans certains contextes de traitement, par ex. DOM, il est utile de représenter tous les attributs XML en tant que paires (espace de noms nom, nom local). Pour ce faire, le nom d'espace de noms http://www.w3.org/2000/xmlns/ est affecté.

+0

Cela fonctionne pour firefox. Une idée de comment le faire fonctionner pour IE, ou est-ce une autre boîte de Pandore? – Fibericon

+1

@Fibericon IE a seulement commencé à prendre en charge SVG dans la version 9 et le support est [bien derrière les autres principaux navigateurs] (http://www.codedread.com/svg-support.php). Pour les versions plus anciennes, vous pouvez essayer [svgweb] (http://code.google.com/p/svgweb/) mais je pense que le support natif est la seule vraie option si vous utilisez 'foreignObject'. – robertc

Questions connexes