我正在为我的应用程序使用Google Chart,并且必须将生成的图表转换为图像字节代码。我已经在Firefox和Chrome中完成了此操作,但是IE8没有响应以获取svg元素,因此现在我无法从给定的div元素中获取字节码。我的将div元素转换为字节码的脚本如下
function getElement() {
for (var i = 0; i < divelement.length; i++) {
toImg(document.getElementById(divelement[i]), i, medicalconditionid[i]);
}
}
function toImg(chartContainer, i, id) {
var field = document.createElement("input");
field.type = "hidden";
field.id = "img_code" + i;
field.name = "imgcode";
document.getElementById("dynamicText").appendChild(field);
document.getElementById('img_code' + i).value = id + "_" + getImgData(chartContainer);
i++;
}
function getImgData(chartContainer) {
var chartArea = chartContainer.getElementsByTagName('svg')[0].parentNode;
var svg = chartArea.innerHTML;
var doc = chartContainer.ownerDocument;
var canvas = doc.createElement('canvas');
canvas.setAttribute('width', chartArea.offsetWidth);
canvas.setAttribute('height', chartArea.offsetHeight);
canvas.setAttribute(
'style',
'position: absolute; ' +
'top: ' + (-chartArea.offsetHeight * 2) + 'px;' +
'left: ' + (-chartArea.offsetWidth * 2) + 'px;');
doc.body.appendChild(canvas);
canvg(canvas, svg);
var imgData = canvas.toDataURL("image/png");
canvas.parentNode.removeChild(canvas);
return imgData;
}
我在IE8中收到
Line: 85Error: 'getElementsByTagName(...).0.parentNode' is null or not an object
错误。 最佳答案
我在IE8中发现不支持svg或canvas元素,因此javascript图表库(例如Google图表,D3和jqplot)将图表转换为vml格式,因此我们无法像上述代码那样获取字节码。在我的应用程序中,谷歌图表可以生成不推荐使用的图像格式图表,但我使用了此图像图表并将图像URL发送到动作类,并将URL转换为图像。请参阅this链接以获取Google图片图表