我需要在我正在处理的网站上显示一些交互式(附带DOM侦听器等和事件处理)矢量图形.有一个针对SVG的W3C建议,虽然这种格式仍然无法被Internet Explorer支持认可(对于公共网站而言).IE处理VML,甚至还有javascript库根据浏览器(SVG与VML)做一些类似画布的绘图 - excanvas,Dojo Toolkit的GFX等等.虽然它们都不能显示给定标记的SVG图像,但这样会很好并且可以接受.
所以问题实际上包括几个部分:
是否有任何跨浏览器的Javascript库显示来自给定标记(非强制性SVG)的矢量图形并提供附加到DOM事件的可用性?
如果没有,哪种最狡猾的浏览器嵌入式技术最适合做这样的任务?我可以选择Flex/Flash,Java applet.由于Windows锁定,Silverlight不是一个选项.
[ 编辑 ]谢谢大家的意见/建议.以下是关于此事的随机笔记/结论:
我需要的交互水平是能够检测正在显示的矢量图像上的DOM事件 - 鼠标悬停,鼠标移动,点击等 - 以及对它们做出反应的能力,如改变背景颜色,显示对话框等.
坚持使用SVG格式的想法非常好,因为除了最受欢迎的IE浏览器之外,它在许多浏览器中都是原生的.经过一些实验显示动态SVG后,我意识到IE 7版本最成问题.由于浏览器不兼容,有太多的麻烦.
Cake似乎是一个很棒的Javascript框架,虽然我无法在IE7上运行这些示例.
Java Applets - 我最喜欢这个想法,因为我可以使用Apache Batik库,一个高质量的SVG渲染器.但是,Batik是一个非常大的库,我不能负担部署一个重量只有兆字节的applet.
我决定坚持使用Flex选项.我发现了一个漂亮的矢量图形库Degrafa.它使用自己的标记格式,但它识别SVG路径表示法,所以在我的情况下,使用XSLT转换我的SVG或者只是解析它们将非常容易.
[ 编辑2 ]出现了更多评论.我想澄清一下,"Windows锁定"是指Silverlight通常在Windows上运行的情况,更具体地说是IE.我怀疑它是其他系统上可接受的解决方案(例如Flash或Java Applet).是的,我毫不怀疑一个人能够在任何系统上启动Silverlight应用程序,但我担心这对普通用户来说太费劲了.
@Akira:你对IE7上的那些"SVG渲染器"有任何问题吗?我总是抛出Javascript错误.
Safari,Opera和Firefox都支持SVG本身(例如没有插件)不同程度的完整性和正确性,包括从javascript编写svg脚本的能力.
还有一个canvas元素现在正在html5中标准化,并且在上述浏览器中也已经支持(由于html5草案中相对较新的变化,在某些边缘情况下存在各种怪癖).
遗憾的是,任何基于标准的方法都被IE故意无视其自身生态系统之外发生的事情所破坏,但是有许多库试图将canvas/svg转换为VML(IE的专有矢量语言),例如iecanvas.
[编辑:哎呀,我忘记了我最喜欢的js库 - 蛋糕!它可以在画布上解析和显示svg,并相信支持IE也是如此]
[又一个编辑:Cake实际上有一个演示做我认为你想做的事]
看看Raphael Javascript库.这是早期的事情,但看起来非常有希望.
我记得在IE7.2中列出了支持SVG的IE路线图.
取决于你想要的互动性如何?