考虑来自node-phantom的代码:
page.evaluate(function() {
return document.getElementById('foo').innerHTML;
}).then(function(html){
console.log(html);
});
函数直接在html页面中执行,因此添加如下参数:
someExternalVariable = 'foo';
page.evaluate(function() {
return document.getElementById(someExternalVariable).innerHTML;
}).then(function(html){
console.log(html);
});
导致未定义someExternalVariable
,因为打开的页面对someExternalVariable
一无所知。那么如何传递外部数据来评估phantomjs-node中的函数?
答案 0 :(得分:1)
如果变量是可序列化的,你可以这样做
someExternalVariable = 'foo';
page.evaluate(function(id) {
return document.getElementById(id).innerHTML;
}, someExternalVariable ).then(function(html){
console.log(html);
})
如果不是(比如你想传递一个关闭函数)我怀疑有办法做到这一点。 Docs
注意:evaluate函数的参数和返回值必须 是一个简单的原始对象。经验法则:如果可以的话 通过JSON序列化,然后就可以了。