Javascript 使用Canvg将svg转换为png:;target.childnodes未定义";错误

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')

我有一个SVG图形,我想将其转换为PNG,然后作为下载提供。如果我选择SVG并使用jQuery创建canvas元素,我会经常在标题中看到错误。如果我使用基本的javascript函数,比如
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”)创建画布。