- From: Simon Pieters <simonp@opera.com>
- Date: Thu, 23 Jul 2009 14:12:19 +0200
- To: "Jeff Schiller" <codedread@gmail.com>, "Geoffrey Sneddon" <gsneddon@opera.com>
- Cc: "HTML WG" <public-html@w3.org>, www-svg <www-svg@w3.org>
On Thu, 23 Jul 2009 13:51:53 +0200, Jeff Schiller <codedread@gmail.com>
wrote:
> On Thu, Jul 23, 2009 at 4:21 AM, Geoffrey Sneddon<gsneddon@opera.com>
> wrote:
>> I'm not sure we want to advocate use of hasFeature, as it seems better
>> to
>> check for capability rather than some claim to support.
>>
>> Given an HTML-with-SVG document, you could just:
>>
>> var svg = document.getElementsByTagName("svg")[0];
>> var supported = svg.namespaceURI == "http://www.w3.org/2000/svg";
>>
>
> It just seems odd to me that the value of the 'supported' variable
> above will depend on whether the first <svg> element in the HTML doc
> was created programmatically (true for most browsers today) or
> declaratively (false for all browsers today).
You can do:
var div = document.createElement('div');
div.innerHTML='<svg></svg>';
var supported = div.firstChild.namespaceURI ==
'http://www.w3.org/2000/svg';
> Of course if it's my document maybe I always know that.
>
> On a slightly different note, it's also always bugged me that I cannot
> reliably provide fallback content for inline SVG without using script.
> Can we figure out a way to do this declaratively? A <nosvg> tag? :)
> Unfortunately that's only part of the problem because browsers that
> don't understand SVG elements will still try to display text nodes and
> <a> elements.
>
> I suppose one solution would be something like:
>
> <!DOCTYPE html>
> <html>
> <head>
> <style type="text/css">
> @namespace svg "http://www.w3.org/2000/svg";
> svg text, svg a { display: none; }
> svg|svg svg|text, svg|svg svg|a { display: block; }
> </style>
> </head>
> <body>
> <svg>
> <fallback>
> <img src="fallback.png"></img>
> <p>Please consider using a browser that supports SVG</p>
> </fallback>
> <circle cx="50" cy="50" r="30" fill="red"></circle>
> <a href="foo.html"><text y="100">This is SVG text</text></a>
> </svg>
> </body></html>
>
> Problems:
>
> 1) Other elements would have to be added to the CSS selectors: tspan,
> textPath, title, desc
> 2) The above assumes that a browser that supports SVG-in-HTML also
> must support CSS Namespaces
You can do:
<svg>
<desc>
<img src="fallback.png" alt="...">
</desc>
<circle cx="50" cy="50" r="30" fill="red"></circle>
<a xlink:href="foo.html"><text y="100"><![CDATA[This is SVG
text]]></text></a>
</svg>
Unfortunately Opera supports CDATA sections in HTML so the text will show
up in Opera. The CSS solution would work for Opera though.
--
Simon Pieters
Opera Software
Received on Thursday, 23 July 2009 12:13:08 UTC