I'm writing a bit of javascript and need to choose between SVG or VML (or both, or something else, it's a weird world). Whilst I know that for now that only IE supports VML, I'd much rather detect functionality than platform.
SVG appears to have a few properties which you can go for: window.SVGAngle for example.
Is this the best way to check for SVG support?
Is there any equivalent for VML?
Unfortuntaly - in firefox I can quite happily do all the rendering in VML without error - just nothing happens on screen. It's quite hard to detect that situation from script.
I'd suggest one tweak to crescentfresh's answer - use
document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1")
rather than
document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Shape", "1.0")
to detect SVG. WebKit is currently very picky about reporting features, and returns false for feature#Shape
despite having relatively solid SVG support. The feature#BasicStructure
alternative is suggested in the comments to https://bugs.webkit.org/show_bug.cgi?id=17400 and gives me the answers I expected on Firefox/Opera/Safari/Chrome (true) and IE (false).
Note that the implementation.hasFeature
approach will ignore support via plugins, so if you want to check for e.g. the Adobe SVG Viewer plugin for IE you'll need to do that separately. I'd imagine the same is true for the RENESIS plugin, but haven't checked.
The SVG check didn't work for me in Chrome, so I looked at what the Modernizer library does in their check (https://github.com/Modernizr/Modernizr/blob/master/modernizr.js).
Based on their code, this is what worked for me:
function supportsSVG() { return !!document.createElementNS && !!document.createElementNS('http://www.w3.org/2000/svg', "svg").createSVGRect; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With