Немного фона... Я немного новичок в javascript и phantom.js, поэтому я не знаю, является ли это ошибкой javascript или phantom.js(функция?).
Выполняется следующее (извините за отсутствующий 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: не удается найти переменную: comment
phantomjs://webpage.evaluate(): 2
phantomjs://webpage.evaluate(): 3
phantomjs://webpage.evaluate(): 3
2: null
Хорошая новость: я знаю, что работает, а что нет, но как насчет небольшой последовательности?
Почему разница между includeJs
и evaluate
?
Каков правильный способ передачи аргументов анонимной функции?