找不到变量 - PhantomJS

时间:2013-03-08 20:42:12

标签: javascript 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 个答案:

答案 0 :(得分:19)

Quick Start教程(代码评估部分)中有一条重要信息:

  

要在网页上下文中评估JavaScript或CoffeeScript代码,请使用evaluate()函数。执行是“沙盒”,代码无法访问其自身页面上下文之外的任何JavaScript对象和变量。可以从evaluate()返回一个对象,但它仅限于简单对象,不能包含函数或闭包。

您的代码问题有两个方面:

  1. 变量elem在网页上下文之外初始化,无法从第二个evaluate访问。
  2. 您返回一个非简单对象,即DOM元素。
  3. 这是一个容易解决的问题,主要是通过正确设计代码以适应实际的“监禁”执行模型。请仔细阅读所有相关文档并探索大量included examples