如何在IE 8中为canvg()准备SVG?

时间:2013-04-30 14:42:04

标签: jquery dom svg html5-canvas canvg

我正在尝试使用canvg来栅格化我文档中嵌入的SVG图像。以下代码在Firefox 17中生成正确的输出:

//svg is a jQuery object that we selected earlier
//canvas is a canvas created earlier
//use a temporary DOM object to serialize the SVG DOM object into text;
var tmpContainer = $(document.createElement('div'));
tmpContainer.append(svg.clone());
var svgText = tmpContainer.get(0).innerHTML;
canvg(canvas.get(0), svgText);

但是,在IE 8(我的组织支持的其他浏览器)中,svgText永远不会获取值。我尝试过其他选项,比如jQuery中的html()方法,但收效甚微 - 毕竟,它并不是真正的html。

我的问题是这样的:如何在SV8中将SVG作为一串文本?还有其他方法可以将其传递给canvg(),我只是没想到吗?

1 个答案:

答案 0 :(得分:0)

好的,所以我有坏消息。准备?这是:

Internet Explorer 8中没有SVG这样的东西

一旦我使用调试器实际在页面源上查看,我发现Google Charts(以及任何其他Javascript图表库)就图表使用VML而不是SVG。这意味着我无法使用canvg()或其他任何东西。

我的选择如下:

  • 使用node.js在服务器端创建SVG图表。 David Padbury了解如何使用Highcharts执行此操作。需要进行大量扩展,但基本理念仍然相同。这是最有可能工作的,但我对node.js一无所知。此外,我需要智能地设计我的服务器和客户端之间的接口,这样我最终不会有两个脚本需要维护。

  • 尝试使用VML转换实用程序。这看起来不太有希望。但是,这是我的JavaScript必须使用的,所以如果我想保持它的客户端,这是最直接的方法。

  • 尝试向IE 8添加SVG支持。有像svgweb这样的javascript库,以及像Adobe's这样的插件,它们尝试向浏览器添加SVG支持。但是,有一些问题。
    • 由于网络大多已经忘记了IE 8,因此这些选项在支持方面停滞不前。对svgweb的最后一次提交是在2011年2月,Adobe在2008年底停止支持他们的插件。
    • 我也不知道Google Charts是否正在对SVG支持进行功能测试,因此它可能仍然只是使用VML来创建图表。