【发布时间】:2014-12-03 23:15:53
【问题描述】:
我需要帮助从由 angularjs 控制器驱动的 html 页面创建 pdf 文件。 pdf 将使用幻像模块创建。一旦我导航到特定的 url,我就能够正确显示和绑定数据,但是当我调用 phantom 来呈现页面时,它不会加载/初始化/调用控制器方法,我尝试了不同的方法,例如从div 或从控制器调用函数一旦完成加载甚至使用
$scope.$on('$viewContentLoaded', function(){
//code here...
})
幻象代码:
function DoThePDF(){
phantom.create(function(ph){
ph.createPage(function(page) {
page.set("paperSize", { format: "A4", orientation: 'portrait', margin: '1cm' });
page.open(address, function(status) {
if(status !== 'success'){
console.log('unable to open webpage');
}
else{
setTimeout(function() {
page.render("reports.pdf");
console.log("page rendered");
ph.exit();
}, 5000);
}
})
})
});
}
当调用 page.open(address, function(status) {...} 我可以看到页面已打开但角度事件/方法没有被初始化/调用所以当页面被渲染时是一个空的 html模板没有数据被绑定。我添加了延迟,但仍然没有帮助。
【问题讨论】:
-
请注册
onConsoleMessage、onError、onResourceError、onResourceTimeout活动。也许有错误。请注意,使用网桥注册有点different。 -
显然 phantom 使用了非常旧的套接字,这些套接字与我正在使用的套接字不兼容,因此无法正确加载页面。
-
PhantomJS 1.x 不支持 websocket。您可以编译 PhantomJS 2。它应该处于可用作 beta 版本的状态。不要忘记用你所有的结果和你为确定这一点所采取的路径来回答你自己的问题。
-
方法一:编译phantomJS2未知状态。方法2:使用angularjs-server在服务器端构建网页,当phamton请求页面已经加载并且不需要与websockets通信。我将发布我的最终解决方案
标签: javascript angularjs node.js phantomjs