Почему я могу оценить только анонимную функцию в spookyjs (casperjs)

Я создаю парсер с помощью spookyjs: https://github.com/WaterfallEngineering/SpookyJS

Я создал новый жуткий объект и пытаюсь оценить функцию, которая возвращает содержимое определенного тега html. Ради удобочитаемости я пытаюсь использовать функцию (returnDataFromSelector()), чтобы делать это каждый раз. Однако, когда я передаю функцию через оценку, она возвращает ноль.

Когда я использую анонимную функцию, она работает правильно. Как я могу заставить функцию returnDataFromSelector работать правильно?

   spooky.then(function() {
      function returnDataFromSelector(selector) {
        return function () {
          return document.querySelectorAll(selector)[0].innerHTML;
        }
      }
      var pageData = {};
      pageData.projectName = this.evaluate(returnDataFromSelector('a.green-dark')); // returns null
      pageData.projectName = this.evaluate(function () { return document.querySelectorAll('a.green-dark')[0].innerHTML;}); // returns correct string
      this.emit('pageData', pageData);
    });

person Bunker    schedule 29.05.2014    source источник


Ответы (1)


Переменная selector находится в неправильном контексте. Вы должны передать селектор отдельно в spooky.evaluate:

spooky.then(function() {
    function returnDataFromSelector(selector) {
        return document.querySelectorAll(selector)[0].innerHTML;
    }
    var pageData = {};
    pageData.projectName = this.evaluate(returnDataFromSelector, 'a.green-dark');
    pageData.projectName = this.evaluate(function () {
        return document.querySelectorAll('a.green-dark')[0].innerHTML;
    });
    this.emit('pageData', pageData);
});
person Artjom B.    schedule 01.06.2014
comment
Спасибо, это должно сработать. Однако теперь он возвращает пустую строку. - person Bunker; 02.06.2014