2010-12-12 49 views
5

Je suis un peu perplexe avec celui-ci. Je rends des visualisations SVG en utilisant Protovis, une bibliothèque JS, et cela fonctionne parfaitement bien dans Chrome et Firefox. J'enregistre le rendu SVG sur mon serveur et j'essaie de le rendre dans une vue "gallery" en utilisant une fonction PHP, et cela échoue dans Firefox. Tout ce que je vois est le texte dans le SVG, mais pas le SVG.inline SVG dans Firefox

J'enregistrer le plein contenu svg, comme ceci:

<svg height="220" width="880" stroke-width="1.5" stroke="none" fill="none" font-family="sans-serif" font-size="10px"><g transform="translate(30, 10)"><line stroke-width="1" 

J'ai essayé d'utiliser <object> mais tout ce qui est fait Firefox invite à télécharger un plugin ne peut pas trouver.

Cela fonctionne en FF4 beta, mais je ne vois pas pourquoi cela ne fonctionnera pas même dans Firefox 3.6. Est-ce quelque chose que je devrais abandonner? Vous pouvez voir une démo ici:

http://www.rioleo.org/protoviewer (cliquer sur "galerie")

Merci encore une fois!

+0

avez-vous essayé header ("Content-type: image/svg + xml"); – pastjean

+0

cela ne rend pas la page non-visible cependant? – Rio

Répondre

4

SVG Inline ne fonctionne que dans Firefox dans deux situations:

  • Firefox a le HTML5 parser expérimental a permis (c'est-à-dire que vous utilisez un 4.0 tous les soirs)
  • Le document en cours d'analyse n'est pas HTML mais XHTML (Content-type: application/xhtml+xml)

L'approche object proposée par Rob devrait fonctionner, tant que le fichier SVG séparé vient de votre serveur avec Content-type: image/svg+xml et que vous utilisez la syntaxe correcte:

<object data="foo.svg" type="image/svg+xml" width="400" height="300"> 

Voir Damian Cugley's article 'SVG: object or embed?' pour plus de détails sur d'autres options ou utilisez SVGWeb.

+0

Pourquoi cela ne fonctionnera-t-il pas si je change la méta-balise content-type dans le fichier en xhtml + xml? – Rio

+0

@Rio Cela n'a rien à voir avec la balise meta, le type de contenu qui compte est dans un en-tête HTTP envoyé par le serveur web. Ceci est généralement contrôlable à partir d'un langage de script côté serveur, selon le commentaire de pastjean. Si vous n'utilisez pas de langage de scriping côté serveur, vérifiez la configuration de votre serveur Web ou essayez de remplacer l'extension de fichier par '.xhtml'. – robertc

0

Assurez-vous que vous utilisez les attributs corrects avec l'élément d'objet et la balise de fin:

<object data="yourimage.svg"></object> 
+0

Bon point, et je fait les changements et maintenant il ressemble à un iFrame dans les deux Chrome et Firefox (le code est toujours là dans l'onglet « galerie » si vous voulez voir), la dernière case. – Rio

+0

@Rio - donc je ne reçois aucun crédit pour cela? – Rob

+0

Eh bien cela ne fonctionne pas: D – Rio

0

This example peut vous être utile, explanation. Le support de rendu SVG sur le temps de chargement et le texte MIME/html est une fonctionnalité supportée du framework web Java ItsNat, de toute façon il a été inspiré sur this JS code, ce dernier peut être utile pour vous dans votre contexte (PHP).