我有一个用HighChart创建的图表。我需要将SVG保存到Internet Explorer中的PNG。我从后面的代码中使用,并且在IE11中存在安全错误。
var canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
var ctx = canvas.getContext('2d');
var imgChart = document.createElement('img');
imgChart.setAttribute('src', 'data:image/svg+xml;base64,' + btoa(unescape(encodeURIComponent(svg))));
imgChart.onload = function () {
ctx.drawImage(imgChart, 0, 0);
var blobObject = canvas.msToBlob();
window.navigator.msSaveBlob(blobObject, 'save.png');
})
我没有找到令人满意的杜佩目标,所以我将其重写为答案:
通过drawImage
绘制SVG图像将在IE&lt中污染画布。出于安全原因,边缘。
此操作对浏览器很敏感,因为SVG图像意味着解析一些XML,并且它可以包含一些棘手的元素<foreignObject>
...(
因此,当绘制SVG图像时,浏览器会添加安全限制,并会阻止所有导出方法。
在Safari> 9中是这种情况,当在上面绘制<foreignObject>
时,在Chrome中也是如此,但是只有当图像来自Blob
然后在IE&LT中边缘,任何SVG。
解决这个问题的唯一方法是解析自己的SVG,然后使用画布的方法来复制它。
这都是可行的,但是可能需要一些时间才能实现,因此,即使我真的不喜欢它,您也可能会使用像Canvg这样的库,这可以做到这一点(使用canvas方法解析 渲染(。