2011-10-04 495 views
0

我使用的是画布对象的toDataURL()方法。它适用于IE9和Chrome。 但它不支持IE7和IE8。我发现这个链接我们可以在IE7和IE8上使用canvas.toDataURL吗?

https://github.com/sampula/SVG.toDataURL/commit/9b59af148b7f14d41974cf318eed6f84c8c91062

它扩展了SVG使用toDataURL()。但在实施中,它再次使用canvas.toDataURL()。我使用Google的API(jquery.flot.js)绘制所有图形图。但它也使用画布来绘制图表。所以,SVG不是一种选择。

我有没有办法使用canvas.toDataURL()或类似的IE7和IE8。

在此先感谢

回答

3

IE7/8不支持Canvas或SVG。

但它支持VML,它是一种类似于SVG的矢量语言,并且有许多基于JavaScript的黑客利用其VML功能在此旧版浏览器中模拟Canvas和SVG。

最有名的IE-帆布黑客这是一个:http://code.google.com/p/explorercanvas/

我没有花了很多时间与它自己,所以我不能保证是否可以做到的特定功能,如toDataURL()方法你在问,但如果你不能这样做,那么它根本不可能成为可能。

我刚才提到VML-> SVG也有类似的工具。如果你感兴趣的话,那么你可能想看看这个:http://code.google.com/p/svg2vml/

请记住,不管这些黑客有多聪明,总会有一个基本的性能问题。按照现代标准,IE7/8的JavaScript解释器非常慢,而这些都是基于JavaScript的工具,试图将非常现代的功能引入这个旧的浏览器。他们可能会工作,但不要试图用你的画布或SVG做任何事情,否则你会杀死浏览器。

最后,既然您提到您正在使用所有这些来绘制图形,我会指出Raphael库的绘图模块。 Raphael是一个在所有浏览器上绘制SVG图形的库(回归到VML for IE)。绘图模块提供了所有常用的图形类型,封装在一个非常易于使用的JavaScript API中。它完全跨浏览器兼容 - 它可以在所有桌面浏览器上使用,从最新的Chrome和Firefox开始直到IE6。如果您正在为使用现在使用的工具兼容跨浏览器而苦恼,则可能需要切换到此库。

希望有所帮助。

+0

首先,我可以使用** Flot API **绘制IE 7/8/9上的图表,它使用Canvas绘制图表。这意味着在IE 7/8中支持Canvas。我看到了生成的代码。我检查了你提到的一切。拉斐尔图书馆看起来最有保证。 –

+3

画布*不受* IE7或IE8支持。如果Flot API设法让它工作,那么它必须在内部做一些类似于我链接到的IE-Canvas hack的东西。 – Spudley

+0

我的最终目标是以图像的形式将图形保存在页面上(通过使用JavaScript获取图像的** base64 **数据)并发送到服务器或本地保存。我可以在Chrome和IE 9上做到这一点,并且如预期的那样,在IE 7/8上不会**。 IE7中最需要哪些功能?我们可以使用JavaScript将SVG图转换为图像吗? [链接](https://raw.github.com/sampula/SVG.toDataURL/master/svg_todataurl.js)在这个URL中,为SVG创建了一个方法**。toDataURL **,但是在内部它再次使用* * Canvas.toDataURL **。 –

2

我最近创建的应用程序中,我不得不使用toDataURL(),但我无法找到任何方式在IE7/8做到这一点。我的应用程序是一个在线图像编辑器,用户可以在其中保存画布内容。我相信我们没有办法在IE7/8中使用这种方法。

+0

选中此链接。它可能有帮助。 [链接](https://github.com/sampula/SVG.toDataURL)....但我怀疑 –

+0

不要认为它会帮助你。你想保存自己的应用程序在客户机画布上创建的图表吗?您必须使用一些数据和计算才能在客户端创建图表。您可以使用相同的数据和计算来使用imagemagick等图像处理库在服务器端创建图表的图像。这就是我所做的。 –

+0

你是对的Shamaila。我也在思考同样的问题。您的评论确认了我的想法。我也一样。非常感谢 –

相关问题