如何将数据传递给page.eveluate函数?

时间:2017-08-10 06:18:21

标签: javascript node.js ecmascript-6 phantomjs phantomjs-node

考虑来自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中的函数?

1 个答案:

答案 0 :(得分:1)

如果变量是可序列化的,你可以这样做

someExternalVariable = 'foo';
page.evaluate(function(id) {
    return document.getElementById(id).innerHTML;
}, someExternalVariable ).then(function(html){
    console.log(html);
})

如果不是(比如你想传递一个关闭函数)我怀疑有办法做到这一点。 Docs

  

注意:evaluate函数的参数和返回值必须   是一个简单的原始对象。经验法则:如果可以的话   通过JSON序列化,然后就可以了。