一个非常类似的案例是on this page处理但是这里的问题主要集中在使用Phantomjs作为服务器。
我的问题是,我使用Phantomjs作为客户端。在我的代码执行期间新的
选项卡已打开。目前我按照以下方式处理此事。这是WebPage:
var page = new WebPage();
page.onConsoleMessage = function(msg) {
console.log(msg);
};
page.onLoadStarted = function() {
loadInProgress = true;
};
page.onLoadFinished = function() {
loadInProgress = false;
};
page.onUrlChanged = function(targetUrl) {
console.log('New URL: ' + targetUrl);
};
现在要处理第二页,我实现了onPageCreated
处理程序,如下所示:
page.onPageCreated = function(new_page){
new_page.onConsoleMessage = function(msg) {
logger.log(msg);
};
new_page.onLoadStarted = function() {
loadInProgress = true;
};
new_page.onLoadFinished = function() {
loadInProgress = false;
};
page = new_page;
};
问题是,这当然只能运行一次,因为分配给旧页面的新页面不会再次实现onPageCreated
方法。
问题:
有没有办法以更优雅的方式做到这一点?我在文档中看到,有一个名为pages
的属性,但文档非常糟糕。是否可以将我正在使用的主框架切换到这个新选项卡并关闭旧选项卡而不像我现在那样更改整个页面元素?
像(伪代码)
之类的东西page.onPageCreated = function(new_page){
//page.mainFrame = new_page.mainFrame;
//or
//page.goToNextTab();
}
其他问题 另一个问题是,如果我只是再次初始化我的页面,它似乎不起作用,就像我在第一个代码片段中所做的那样。在我看来,收集垃圾的同时不应该收集垃圾。