一点背景..。我对javascript和phantom.js都是个新手,所以我不知道这是javascript还是phantom.js bug (特性?)。
下面的代码成功完成(很抱歉,缺少phantom.exit(),一旦完成,您就必须使用ctrl+c ):
var page = require('webpage').create();
var comment = "Hello World";
page.viewportSize = { width: 800, height: 600 };
page.open("http://www.google.com", function (status) {
if (status !== 'success') {
console.log('Unable to load the address!');
phantom.exit();
} else {
page.includeJs('http://code.jquery.com/jquery-latest.min.js', function() {
console.log("1: ", comment);
}, comment);
var foo = page.evaluate(function() {
return arguments[0];
}, comment);
console.log("2: ", foo);
}
});
这是可行的:
page.includeJs('http://code.jquery.com/jquery-latest.min.js', function() {
console.log("1: ", comment);
}, comment);
输出:1: Hello World
但不是:
page.includeJs('http://code.jquery.com/jquery-latest.min.js', function(c) {
console.log("1: ", c);
}, comment);
输出:1: http://code.jquery.com/jquery-latest.min.js
而不是:
page.includeJs('http://code.jquery.com/jquery-latest.min.js', function() {
console.log("1: ", arguments[0]);
}, comment);
输出:1: http://code.jquery.com/jquery-latest.min.js
看第二部分,这是可行的:
var foo = page.evaluate(function() {
return arguments[0];
}, comment);
console.log("2: ", foo);
输出:2: Hello World
还有这个:
var foo = page.evaluate(function(c) {
return c;
}, comment);
console.log("2: ", foo);
输出:2: Hello World
但不是这样的:
var foo = page.evaluate(function() {
return comment;
}, comment);
console.log("2: ", foo);
输出
ReferenceError:找不到变量:注释
phantomjs://webpage.valuate():2
phantomjs://webpage.valuate():3
phantomjs://webpage.valuate():3
2:空
好消息是,我知道什么是有效的,什么是无效的,但是如何保持一点一致性呢?
为什么includeJs
和evaluate
会有不同
向匿名函数传递参数的正确方式是什么?
https://stackoverflow.com/questions/12222856
复制相似问题