私はその正確な問題を抱えていました。page.evaluate
文字列も受け入れることができるので、ちょっとしたトリックで実行できます。
いくつかの方法がありますが、私は というラッパーを使用します。このラッパーevaluate
は、Webkit 側で評価する必要がある関数に渡す追加パラメーターを受け入れます。次のように使用します。
page.open(url, function() {
var foo = 42;
evaluate(page, function(foo) {
// this code has now has access to foo
console.log(foo);
}, foo);
});
そして、ここにevaluate()
関数があります:
/*
* This function wraps WebPage.evaluate, and offers the possibility to pass
* parameters into the webpage function. The PhantomJS issue is here:
*
* http://code.google.com/p/phantomjs/issues/detail?id=132
*
* This is from comment #43.
*/
function evaluate(page, func) {
var args = [].slice.call(arguments, 2);
var fn = "function() { return (" + func.toString() + ").apply(this, " + JSON.stringify(args) + ");}";
return page.evaluate(fn);
}