Javascript 如何从传递到CasperJS中求值的函数调用另一个函数
以下是我试图做的:Javascript 如何从传递到CasperJS中求值的函数调用另一个函数,javascript,scope,phantomjs,casperjs,Javascript,Scope,Phantomjs,Casperjs,以下是我试图做的: var casper = require('casper').create(); casper.start('mysite.html', function() { }); /* Casper configuration */ casper.on('remote.message', function(msg) { this.echo('remote message caught: ' + msg); }) function getAllImages() {
var casper = require('casper').create();
casper.start('mysite.html', function() {
});
/* Casper configuration */
casper.on('remote.message', function(msg) {
this.echo('remote message caught: ' + msg);
})
function getAllImages()
{
// Get all images
var images = document.getElementsByTagName('img');
evaluateImages(images);
}
function evaluateImages(images)
{
console.log("I am in evaluateImages");
}
// Then find all pictures
casper.then(function() {
var product_image = this.evaluate(getAllImages);
});
casper.run();
但它永远无法评估图像的功能。我在这里遗漏了什么?好吧,我从来没有使用过CasperJS,但是从我在文档中读到的内容来看,我相信这是因为
evaluateImages
函数在页面上下文中不存在
我不确定这里的最佳实践是什么,但是您似乎可以从evaluate回调返回原语,因此您可以在技术上执行以下操作:
function getAllImages() {
// Get all images
var images = document.getElementsByTagName('img');
//Return an array that contains all images src attribute
return Array.prototype.map.call(images, function (img) {
return img.src;
});
}
var images = this.evaluate(getAllImages);
evaluateImages(images);
this.evaluate(function () {
yourNS.evaluateImages(yourNS.getAllImages());
});
然后,您可以执行以下操作:
function getAllImages() {
// Get all images
var images = document.getElementsByTagName('img');
//Return an array that contains all images src attribute
return Array.prototype.map.call(images, function (img) {
return img.src;
});
}
var images = this.evaluate(getAllImages);
evaluateImages(images);
this.evaluate(function () {
yourNS.evaluateImages(yourNS.getAllImages());
});
编辑:
在比较时,我需要处理页面上下文中的所有图像
它们中的每一个都与页面中的其他元素一起
也许您可以先在页面的上下文中定义一个模块:
this.evaluate(function () {
window.yourNS = {
evaluateImages: function (images) {
//do something with images
},
getAllImages: function () {
return document.getElementsByTagName('img');
}
};
});
然后,您可以执行以下操作:
function getAllImages() {
// Get all images
var images = document.getElementsByTagName('img');
//Return an array that contains all images src attribute
return Array.prototype.map.call(images, function (img) {
return img.src;
});
}
var images = this.evaluate(getAllImages);
evaluateImages(images);
this.evaluate(function () {
yourNS.evaluateImages(yourNS.getAllImages());
});
嗯,我从未使用过CasperJS,但是从我在文档中读到的内容来看,我相信这是因为
evaluateImages
函数在页面上下文中不存在
我不确定这里的最佳实践是什么,但是您似乎可以从evaluate回调返回原语,因此您可以在技术上执行以下操作:
function getAllImages() {
// Get all images
var images = document.getElementsByTagName('img');
//Return an array that contains all images src attribute
return Array.prototype.map.call(images, function (img) {
return img.src;
});
}
var images = this.evaluate(getAllImages);
evaluateImages(images);
this.evaluate(function () {
yourNS.evaluateImages(yourNS.getAllImages());
});
然后,您可以执行以下操作:
function getAllImages() {
// Get all images
var images = document.getElementsByTagName('img');
//Return an array that contains all images src attribute
return Array.prototype.map.call(images, function (img) {
return img.src;
});
}
var images = this.evaluate(getAllImages);
evaluateImages(images);
this.evaluate(function () {
yourNS.evaluateImages(yourNS.getAllImages());
});
编辑:
在比较时,我需要处理页面上下文中的所有图像
它们中的每一个都与页面中的其他元素一起
也许您可以先在页面的上下文中定义一个模块:
this.evaluate(function () {
window.yourNS = {
evaluateImages: function (images) {
//do something with images
},
getAllImages: function () {
return document.getElementsByTagName('img');
}
};
});
然后,您可以执行以下操作:
function getAllImages() {
// Get all images
var images = document.getElementsByTagName('img');
//Return an array that contains all images src attribute
return Array.prototype.map.call(images, function (img) {
return img.src;
});
}
var images = this.evaluate(getAllImages);
evaluateImages(images);
this.evaluate(function () {
yourNS.evaluateImages(yourNS.getAllImages());
});
是的,这是正确的,那么如何在页面的上下文中使用多个函数呢?我需要在页面上下文中进行大量计算,我不希望有一个巨大的函数,而是希望有几个函数。我应该把“支持”功能放在我正在传递给页面上下文的功能中吗?@HommerSmith我更新了答案,但是我不确定这是CasperJS的最佳实践。谢谢您的编辑。是的,我已经这样做了,返回srcs属性,但这没有帮助。我需要处理页面上下文中的所有图像,因为我正在将它们与页面中的其他元素进行比较…非常聪明。我一到家就试试这个。谢谢,没错,那么我如何在页面上下文中使用多个函数呢?我需要在页面上下文中进行大量计算,我不希望有一个巨大的函数,而是希望有几个函数。我应该把“支持”功能放在我正在传递给页面上下文的功能中吗?@HommerSmith我更新了答案,但是我不确定这是CasperJS的最佳实践。谢谢您的编辑。是的,我已经这样做了,返回srcs属性,但这没有帮助。我需要处理页面上下文中的所有图像,因为我正在将它们与页面中的其他元素进行比较…非常聪明。我一到家就试试这个。谢谢