0

考虑来自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);
});

导致undefined someExternalVariable,因为打开的页面什么都不知道someExternalVariable。那么如何传递外部数据来评估phantomjs-node中的函数呢?

4

1 回答 1

1

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

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

如果不是(假设你想通过闭包传递一个函数)我怀疑有办法做到这一点。文档

注意:评估函数的参数和返回值必须是简单的原始对象。经验法则:如果它可以通过 JSON 序列化,那就没问题了。

于 2017-08-10T06:34:38.653 回答