我使用PhantomJS每隔五分钟拍摄一次页面截图,大部分时间都能正常工作。问题是,有时我截取屏幕截图的页面无法加载AngularJS库,然后,它无法构建页面。所以我试图找出如何在其位置加载本地副本。这是我一直在尝试的......
var page = require('webpage').create(),system = require('system');
var home = 'https://smartway.tn.gov/traffic/';
page.open(home, function (status) {
if(status === "success"){
page.injectJs('angular.js');
window.setTimeout((function() {
page.evaluate(function () {
/*stuff*/
});
}), 2000);
}
});
因此angular.js是我的网站通常下载的本地副本的名称。该站点使用其他几个脚本调用主体末尾的脚本,我正在尝试找到包含它的最佳方法。我想知道是否需要通过替换html中的脚本标记来包含它,以便它可以按顺序加载,但我不知道该怎么做。
由于
答案 0 :(得分:1)
在失败时重新加载单个JavaScript文件是有问题的,特别是当它是框架时。可能有许多依赖它的脚本。未加载核心框架时,这些脚本将停止执行,因为angular
引用无法解析。
你可以注入一个本地版本的angular,但是你必须通过下载和{{1来查看引用angular
和“重新加载”它们的所有其他脚本。按顺序将它们放入页面或作为脚本元素放入页面。我建议反对它,因为它可能非常容易出错。
如果在页面加载后没有角度(eval
的回调),则应该重新加载页面。由于在重新加载期间可能会出现同样的问题,因此必须以递归方式完成:
page.open
您还可以尝试page.reload()
功能而不是function open(countDown, done){
if (countDown === 0) {
done("ERROR: not loaded");
return;
}
page.open(home, function (status) {
if(status === "success"){
var angularExists = page.evaluate(function () {
return !!angular;
});
if (angularExists){
done();
} else {
open(countDown - 1, done);
}
} else {
open(countDown - 1, done);
}
});
}
open(5, function(err){
if(err) {
console.log(err);
} else {
page.render(target);
}
});
。
另一种可能性是在页面加载开始时始终注入本地版本并停止对脚本远程版本的任何请求:
page.open()
此版本完全无需重新加载。