Javascript PhantomJS和FabricJS赢了';存在PNG时,不能将画布转换为SVG

Javascript PhantomJS和FabricJS赢了';存在PNG时,不能将画布转换为SVG,javascript,canvas,svg,phantomjs,fabricjs,Javascript,Canvas,Svg,Phantomjs,Fabricjs,我使用FabricJS使用PhantomJS运行代码。它使用元素创建HTML5画布,然后使用该画布创建SVG。除了画布使用PNG图像外,这在所有情况下都很有效。如果画布使用的是SVG图像,则不存在此问题。它不是生成正确的SVG输出,而是输出一个空的SVG,如下所示 <?xml version="1.0" encoding="UTF-8" standalone="no" ?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http:

我使用FabricJS使用PhantomJS运行代码。它使用元素创建HTML5画布,然后使用该画布创建
SVG
。除了画布使用
PNG
图像外,这在所有情况下都很有效。如果画布使用的是
SVG
图像,则不存在此问题。它不是生成正确的
SVG
输出,而是输出一个空的
SVG
,如下所示

<?xml version="1.0" encoding="UTF-8" standalone="no" ?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="902" height="542" xml:space="preserve"><desc>Created with Fabric.js 1.5.0</desc><defs></defs></svg>
如果我将它粘贴到Chrome Inspect控制台中,我会得到空的SVG,但是如果我用它替换最后一行

setTimeout(function(){ 
    console.log(PDCExport.downloadSVG());
}, 3000);
它输出完整的SVG,在控制台中工作,但在PhantomJS中仍然失败

我看到setTimeout在PhantomJS中不起作用,至少在page.evaluate中是这样,我想这就是我在这里需要的。并且似乎建议PhantomJS应该能够在page.evaluate内处理setTimeout

我尝试过使用,但没有取得更好的效果

我也尝试了一个单独的评估,但似乎它并没有保留以前评估的记忆

    return setTimeout(function(){ 
      return result = page.evaluate(function() {
        return PDCExport.downloadSVG() + '|' + 'test';
      });
    }, 3000);
我也尝试过这样的手动设置超时

var start_wait = new Date().getTime() / 1000;
var wait_time = 3;
var end_wait = start_wait + wait_time;
while (new Date().getTime() / 1000 < end_wait)
{
}
return PDCExport.downloadSVG() + '|' + 'test';
var start\u wait=new Date().getTime()/1000;
var等待时间=3;
var end_wait=开始_wait+等待时间;
while(new Date().getTime()/1000
所有这些都不起作用。如果需要,我会给出更多的代码,但我的问题本质上是这样的

如何让PhantomJS在
页面中等待。评估

    return setTimeout(function(){ 
      return result = page.evaluate(function() {
        return PDCExport.downloadSVG() + '|' + 'test';
      });
    }, 3000);
var start_wait = new Date().getTime() / 1000;
var wait_time = 3;
var end_wait = start_wait + wait_time;
while (new Date().getTime() / 1000 < end_wait)
{
}
return PDCExport.downloadSVG() + '|' + 'test';