Atlas, XHTML, SVG et Firefox ...
En ce moment je suis en train de m'amuser avec VML, SVG et Atlas. Je pense que tout le monde connait au moins de nom Atlas, par contre ce n'est peut être pas le cas de SVG et VML.
SVG et VML sont deux langages reposant sur XML permettant de faire du dessin. SVG est un standard du W3C alors que VML a été créé par Microsoft et refusé par le W3C ... pour en savoir plus sur le VML je vous conseille de lire les excellents articles d'Aurélien n'oublié surtout pas de vister cette page où Aurélien a fait un générateur de VML : impressionant ! en ce qui concerne SVG vous trouverez sur cette page quelques exemples.
Vous avez donc compris que VML ne fonctionne que sous IE 5+ alors que SVG fonctionne sous Firefox 1.5, Opéra, Safari ... si l'on veut dessiner sur une page web et faire en sorte que cela fonctionne sur tous les navigateurs il faut gérer les 2 technos : même pas peur :)
Mais voila j'ai un problème. Firefox affiche le dessin SVG seulement s'il utilise le parseur XML pour parser la page plutot que le parseur HTML, c'est à dire qu'il faut envoyer la page avec un content-type application/xhml+xml plutot que le classique text/xml, or si on envoit une page XHTML avec le content-type application/xhtml+xml a Internet Explorer, celui ci affiche la source du document. Il faut donc que je détecte côté serveur le navigateur pour lui envoyer le bon content-type, je n'aime pas du tout ça mais c'est pour la bonne cause.
Le vrai problème est que Atlas n'accepte pas le document XHTML envoyé en tant que application/xhtml+xml.
Cette très simple page nous le prouve :
<%
@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(Object sender, EventArgs e)
{
Response.ContentType = "application/xhtml+xml";
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<atlas:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" />
<atlas:UpdatePanel ID="panel1" runat="server" >
<ContentTemplate>
<%=DateTime.Now.ToLongTimeString() %>
</ContentTemplate>
<Triggers>
<atlas:ControlEventTrigger ControlID="timer1" EventName="Tick" />
</Triggers>
</atlas:UpdatePanel>
<atlas:TimerControl Enabled="true" ID="timer1" runat="server" Interval="1000" />
</form>
</body>
</html> Si on ne définit pas le content-type alors la page fonctionnera normalement : la date sera mis à jour toutes les secondes. Avec le content-type application/xhtml+xml ou application/xml rien ne se passe ! Le problème vient surement du fait que le DOM de Firefox est différent suivant si c'est un document XML ou HTML.
Alors que faire pour réussir à utiliser à la fois Atlas et SVG ? pour l'instant je ne sais pas, mais si l'un d'entre vous a une solution je suis entierement preneur.
Voici quelques adresses qui m'ont aidé à comprendre ce problème :
Sending XHTML as text/html Considered Harmful : http://hixie.ch/advocacy/xhtml
Inline SVG : http://wiki.svg.org/index.php?title=Inline_SVG