Javascript 使用Canvg将svg转换为png:;target.childnodes未定义";错误
我有一个SVG图形,我想将其转换为PNG,然后作为下载提供。如果我选择SVG并使用jQuery创建canvas元素,我会经常在标题中看到错误。如果我使用基本的javascript函数,比如Javascript 使用Canvg将svg转换为png:;target.childnodes未定义";错误,javascript,jquery,canvas,svg,Javascript,Jquery,Canvas,Svg,我有一个SVG图形,我想将其转换为PNG,然后作为下载提供。如果我选择SVG并使用jQuery创建canvas元素,我会经常在标题中看到错误。如果我使用基本的javascript函数,比如createElement和getElementById,它似乎可以工作 那么这个错误意味着什么呢?如果我看一下canvg源代码,target似乎是canvg方法中的canvas(参见下面的代码)。但当然它没有任何子对象,我没有在它后面附加任何其他内容 这是我的密码: var svg = $('#chart')
createElement
和getElementById
,它似乎可以工作
那么这个错误意味着什么呢?如果我看一下canvg
源代码,target
似乎是canvg
方法中的canvas
(参见下面的代码)。但当然它没有任何子对象,我没有在它后面附加任何其他内容
这是我的密码:
var svg = $('#chart')[0],
canvas = $("canvas"),
serializer = new XMLSerializer(),
svgString = serializer.serializeToString(svg);
canvas.width = svg.width;
canvas.height = svg.height;
canvg(canvas, svgString);
不能将jQuery对象传递给canvg,必须传递元素 在我看来,如果您确实传递了一个容器,那么canvg会检查自己,因此它必须检索canvas元素。
事实上他们甚至都不这么做。。。我不知道他们在调查childNodes,但他们确实在调查。(如果传递其他HtmleElement,它将抛出一个
target.getContext不是函数error…)
与任何其他HTML元素一样,CanvasElement确实实现了childNodes
属性,因此它们肯定会检查target.childNodes.length
,如果是truthy,则在列表中检查画布元素,否则使用画布。如果不检查(target.childNodes&&target.childNodes.length)
的话,这个调用将抛出您得到的错误
因此,简单的解决方法是设置canvas=$(“canvas”)[0]
您是否在任何地方创建画布,因为现在看起来您只使用$(“canvas”)
选择画布,而不使用document.createElement(“canvas”)创建画布。