PhantomJS;如果我在page.evaluate()中设置一个变量,如何在page.evaluate()之外访问该变量的值

时间:2014-02-10 20:56:49

标签: javascript jquery phantomjs

使用PhantomJS考虑以下代码片段:

var reloadAfterLogin = false;
function(user, pass, debug){ // step 3 submit Login
   page.evaluate(function(user, pass, debug){
     if($("form").attr("action").indexOf("login.do") > 0){
       reloadAfterLogin = true;
       $('form').submit();
     }
   }, user, pass, debug);
 },

据我了解,这不仅仅是一个范围问题。在page.evaluate()内部执行的代码是一个完整的独立JavaScript实例。我不得不承认我仍然很难解决PhantomJS如何工作但我需要访问page.evaluate()之外的reloadAfterLogin变量。我怎么能这样做?

2 个答案:

答案 0 :(得分:5)

您可以evaluate回调中return。我想你想要

function(user, pass, debug){ // step 3 submit Login
  reloadAfterLogin = page.evaluate(function(user, pass, debug){
    if($("form").attr("action").indexOf("login.do") > 0){
      $('form').submit();
      return true;
    }
    return false;
  }, user, pass, debug);
}

答案 1 :(得分:1)

如果由于任何原因你无法从Bergi所描述的评估回调中返回,你可以通过滥用onConsoleMessage来使用hacky解决方法:

从webpage.evaluate()中将您的数据作为JSON发送,如下所示:

console.log('{"foo": "bar"}');

然后,您可以将此数据提取到全局空间(webpage.evaluate()之外):

webpage.onConsoleMessage = function(msg) {
  var obj = JSON.parse(msg);
  // Do whatever you like with obj...
};
相关问题