Javascript PhantomJS和FabricJS赢了';存在PNG时,不能将画布转换为SVG
我使用FabricJS使用PhantomJS运行代码。它使用元素创建HTML5画布,然后使用该画布创建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:
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';