2013-03-08 3 views
11

Я отправляю сюда после многих часов бесплодных поисков. PhantomJS не позволяет мне использовать переменную, как в приведенном ниже коде, с сообщением об ошибке при запуске моего сценария «Невозможно найти переменную».Не могу найти переменную - PhantomJS

У вас есть идеи, где может быть моя проблема?

page.open(myurl, function (status) { 

    if (status == 'success') { 

     page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js", function() { 

      elem = page.evaluate(function() { 

       /* Select one element with jQuery */ 
       myElem = $('body'); 
       return myElem; 

      }) 

      var elemHtml = page.evaluate(function() { return $(elem).html(); }); 
      console.log(elemHtml); 

     }) 

     phantom.exit();  

    } 

}) 

Спасибо =)

+0

Где мой идентификатор 'myElem'? –

+0

У меня есть обновленный код, чтобы показать вам, где myElem определяется :) – Antoine

ответ

19

Существует важная часть информации в Quick Start учебнике (в Код оценки секции):

Для оценки JavaScript или CoffeeScript код в контексте веб-страницы, используйте функцию оценки(). Выполнение «изолировано», для кода не существует доступа к каким-либо объектам и переменным JavaScript вне его собственного контекста страницы. Объект может быть возвращен из метода оценки(), однако он ограничен простыми объектами и не может содержать функции или закрытия.

Проблема с кодом, таким образом, в два раза:

  1. Переменная elem инициализируется вне контекста веб-страницы, не достижима из второго evaluate.
  2. Вы возвращаете непростой объект, т. Е. Элемент DOM.

Это простая проблема для решения, главным образом путем правильного проектирования кода, соответствующего реальной модели исполнения «под стражей». Пожалуйста, внимательно прочитайте всю соответствующую документацию и изучите тонны included examples.

+2

хорошая работа! смешно, что у вас был единственный ответ, и ваша фамилия означает «Наведение» – pythonian29033

+1

Я до сих пор не знаю, как этого достичь. У меня есть случай для доступа к переменной на странице. Evaluate(). Я хочу найти элемент DOM на основе String, переданного в метод оценки(). Можете ли вы показать мне/указать мне код? – rohit12sh

+1

«Пожалуйста, внимательно прочитайте всю соответствующую документацию (...)» - да? например. «Я не скажу тебе ...» –

Смежные вопросы