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/
   413   414   415   416   417   418   419   420   421   422   423