2014-02-10 59 views
2

使用PhantomJS考慮下面的代碼片段:PhantomJS;如果我把裏面page.evaluate)變量(,我怎麼能訪問page.evaluate以外該變量的值()

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變量。我怎樣才能做到這一點?

回答

4

你可以從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); 
} 
+0

這解決了我的問題。謝謝! –

1

如果你不能從由BERGI無論出於何種原因描述評價回調返回,您可以通過濫用onConsoleMessage使用哈克解決方法:

從內部webpage.evaluate要發送的數據作爲JSON ()像這樣:

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

然後,您可以提取這些數據的全球空間(外webpage.evaluate()):

webpage.onConsoleMessage = function(msg) { 
    var obj = JSON.parse(msg); 
    // Do whatever you like with obj... 
}; 
+0

有趣!我喜歡。 –

相關問題