angularjs - 等待 Angular 应用程序从幻像脚本中完全呈现

标签 angularjs phantomjs

我正在编写一个脚本,它从我前端的每一页生成 png 图像。
我正在为 UI 使用 Angular 并使用幻像捕获页面。

该 View 需要一段时间才能完成渲染,因此我必须稍等片刻才能捕获:

var page = require('webpage').create();
page.open('http://localhost:9000/', function () {
  window.setTimeout(function () {
    page.render('snapshot.png');
    phantom.exit();
  }, 2000);
});

我想知道是否有更好的方法来实现这一点。我发现 angular 可以在页面完全呈现时发出一个事件:
$scope.$on('$viewContentLoaded', function () {
  // do something
});

并找到了一种与 onCallback 进行幻像通信的方法所以我可以写这样的东西:
$scope.$on('$viewContentLoaded', function () {
  window.callPhantom({ hello: 'world' });
});

然后在幻影脚本的其他地方:
page.onCallback = function() {
  page.render('snapshot.png');
  phantom.exit();
};

但是我迷失了如何注入(inject) Angular $viewContentLoaded来自幻影脚本的句柄。

不知道evaluate/evalueateAsyn是要走的路...
page.evaluateAsync(function () {
  $scope.$on('$viewContentLoaded', function () {
    window.callPhantom({ hello: 'world' });
  });
});

也许我可以访问正确的$scope某种程度上来说。
有任何想法吗?

最佳答案

关联的 PhantomJS API 是 onCallback ;你可以find the API doc on the wiki .

// in angular
$scope.$on('$viewContentLoaded', function () {
  window.callPhantom();
});

// in the phantomjs script
var page = require('webpage').create();
page.onCallback = function() {
  page.render('snapshot.png');
  phantom.exit();
};
page.open('http://localhost:9000/');

您可以访问 $rootScope通过访问注入(inject)器;例如,如果您使用 ng-app指令,您可以找到带有指令的元素并调用 .injector().get("$rootScope")在上面。但是,我不确定 $viewContentLoaded到那时,事件已经被触发了。

关于angularjs - 等待 Angular 应用程序从幻像脚本中完全呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18604618/

相关文章:

javascript - 基于使用指令的变量添加 css 类(或样式)

angularjs - 是否可以在选项中给出模态的大小

javascript - 为什么我需要一个 Selenium Server 而不是直接调用 WebDriver 实现

Javascript 代码未使用 python 代码提取

javascript - 将数据传递给指令内部的 ng-repeat 指令

javascript - 简写 if 语句总是返回 true

html - AngularJS - html5Mode - 无法获取/登录

phantomjs - 如何减少PhantomJS的CPU和内存使用量?

java - 测试完成后如何杀死在后台运行的 phantomjs 进程

javascript - 使用命令行选项时如何在 CasperJS 中保留长数字?