2013-10-23 103 views
1

我使用Google Chart作爲我的應用程序,我必須將生成的圖轉換爲圖像字節代碼。我已經在Firefox和Chrome中完成了這項工作,但是IE8沒有響應獲取svg元素,所以現在我無法從給定的div元素獲取字節碼。我的腳本div元素轉換成字節碼下面getElementsByTagName(...)。0.parentNode'爲空或不是對象

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; 
} 

給予我得到一個Line: 85 Error: 'getElementsByTagName(...).0.parentNode' is null or not an object錯誤在IE8。

+0

檢查「chartContainer」是否在您嘗試獲取其中的任何元素之前所期望的。只要做'console.log(chartContainer)'看看它是什麼。 – Archer

+0

即時獲取預期的元素,但在firefox和克羅姆svg元素存在,並在IE8 IFrame元素存在。這就是問題 – Hariprasath

+0

偉大 - 所以你可以從那裏拿它:) – Archer

回答

0

我在IE8中發現有爲SVG和Canvas元素,所以像谷歌圖表的JavaScript圖表庫,D3和jqplot圖表轉換爲VML格式不支持,所以我們不能得到字節碼像以上代碼。在我的應用程序中,谷歌圖表可以生成不贊成使用的圖像格式圖表,但我使用此圖像圖表並將圖像url發送到操作類並將網址轉換爲圖像。請參閱this谷歌圖表圖表鏈接

相關問題