Page 418 - AngularJS权威教程
P. 418
398 第 30 章 AngularJS 和 IE 浏览器
上面的浏览器配置中设置了一个相对较大的waitFor。这个选项会覆盖我们所关心的90%的
情况。如果想在获取一个快照时使用更精确的方式,而不是等待2秒,则需要修改Angular应用来
触发一个事件,然后在Zombie浏览器中监听这个事件。
由于我们希望尽可能自动化,而不想污染Angular代码,因此宁愿设置一个相对较高的超时
来尝试让代码保持稳定。
crawlPage()函数:
var crawlPage = function(idx, arr) {
// location = window.location
if(idx < arr.length) {
var uri = arr[idx];
var brower = new Brower(browerOpts);
var promise = brower.visit(uri).then(function() {
// 将链接转换为绝对链接,然后保存它们
// 如果需要并且还没准备好就抓取它们
var links = brower.queryAll('a');
links.forEach(function(link) {
var href = link.getAttribute('href');
var absUrl = url.resolve(uri, href);
link.setAttribute('href', absUrl);
if(arr.indexOf(absUrl) < 0) {
arr.push(absUrl);
}
});
// 保存
saveSnapshot(uri, brower.html());
// 在下次迭代中再次调用
crawlPage(idx+1, arr);
});
}
}
现在,可以在我们的页面中调用这个方法了:
crawlPage(0, ["http://localhost:9000"]);
30.8 使用 grunt-html-snapshot
①
我们推荐使用Grunt工具grunt-html-snapshot来生成快照。因为我们使用Yeoman ,所以
Grunt已经存在于我们的构建过程之中,我们只需设置这个任务在发布应用之后运行即可。
要安装grunt-html-snapshot,可以像这样使用npm安装它:
npm install grunt-html-snapshot --save-dev
如果不使用Yeoman ,就需要将这个任务作为一个Grunt任务包含到Gruntfile.js中:
②
grunt.loadNpmTasks('grunt-html-snapshot');
——————————
① http://yeoman.io/
② http://yeoman.io/