Не могу найти переменную - 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();     

    }  

})

Спасибо =)

1 ответ

Решение

В кратком руководстве (в разделе " Оценка кода ") содержится важная информация:

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

Таким образом, проблема с вашим кодом состоит из двух частей:

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

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

Другие вопросы по тегам