12

经过数小时徒劳的搜索后,我在这里发帖。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();     

    }  

})

谢谢 =)

4

1 回答 1

19

快速入门教程(在其代码评估部分)中有一条重要信息:

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

因此,您的代码存在双重问题:

  1. 变量elem在网页上下文之外初始化,它不能从第二个evaluate.
  2. 您返回一个非简单对象,即一个 DOM 元素。

这是一个容易解决的问题,主要是通过适当地设计代码以适应实际的“监禁”执行模型。请仔细阅读所有相关文档并探索大量包含的示例

于 2013-03-09T04:39:59.563 回答