我有這個確切的問題。它可以用一點小手段完成,因爲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);
}
我相信你會發現這個答案更充分:http://stackoverflow.com/questions/28524130/phantomjs -does-not-arguments-to-function-passed-to-page-evaluation – user2977636 2016-08-19 02:54:43