【发布时间】:2015-12-25 13:56:49
【问题描述】:
我正在使用 slimerjs 来渲染一些 html 文件。每个文件都包含一个 JSON 字符串,通过调用
加载该字符串fabricjsCanvas.loadFromJson(jsonString, fabricjsCanvas.renderAll.bind(fabricjsCanvas));
这是我打开页面的地方
page.open(address, function (status) {
if (status !== 'success') {
console.log('Unable to load the page!');
phantom.exit(1);
} else {
page.render(output);
window.setTimeout(function () {
page.render(output);
phantom.exit();
}, 5000);
}
});
如您所见,我必须设置一个超时,之后 slimerjs 会关闭页面以保存其中的内容。我真的不喜欢这个解决方案,因为我需要渲染多个页面,其中一些非常小,可能需要不到 200 毫秒,另一些很大,可能需要超过 5000 毫秒,所以这对性能和对于需要很长时间才能呈现的页面,这甚至不是一个“安全的解决方案”。我尝试在 canvas.renderAll 调用的末尾放置一个 console.log,然后将这段代码添加到我的 slimerjs 脚本中
page.onConsoleMessage = function (msg) {
console.log(msg);
page.render(output);
phantom.exit();
};page.open(address, function (status) {
if (status !== 'success') {
console.log('Unable to load the address!');
phantom.exit(1);
}
});
我希望这会有所帮助,但并没有真正改变,reanderAll 在显示所有对象之前完成。 有什么我可以捕捉到的事件,或者我可以做些什么来防止这种情况发生吗?
【问题讨论】:
标签: javascript image canvas phantomjs fabricjs