Javascript 是否可以使用spookyjs从casperjs范围中的节点范围调用求值函数?
我试图传递一个令人毛骨悚然的外部函数,但当我调用它时,返回的值是“未定义的”。 这是我的密码:Javascript 是否可以使用spookyjs从casperjs范围中的节点范围调用求值函数?,javascript,node.js,phantomjs,casperjs,spookyjs,Javascript,Node.js,Phantomjs,Casperjs,Spookyjs,我试图传递一个令人毛骨悚然的外部函数,但当我调用它时,返回的值是“未定义的”。 这是我的密码: var eval_func = function(){ return 123; }; console.log('Outside spooky: ' + eval_func()); var spooky = new Spooky({ child: { transp
var eval_func = function(){
return 123;
};
console.log('Outside spooky: ' + eval_func());
var spooky = new Spooky({
child: {
transport: 'http',
},
casper: {
logLevel: 'error',
}
}, function (err) {
if (err) {
e = new Error('Failed to initialize SpookyJS');
e.details = err;
throw e;
}
spooky.start('http://google.com/',[{
eval_func:eval_func,
},function(){
console.log('Inside spooky: ' + eval_func());
}]);
spooky.run();
});
spooky.on('console', function (line) {
console.log(line);
});
});
输出为:
Outside spooky: 123
我得到“ReferenceError:找不到变量:eval_func”。
是否可以在没有任何引用错误的情况下执行此操作?好的,我找到了一个解决此问题的好方法。我复制了函数字符串,然后在casperjs范围内重新生成它
eval_func = function(){
return 123;
}
console.log('Outside spooky: ' + eval_func());
var spooky = new Spooky({
child: {
transport: 'http',
},
casper: {
logLevel: 'error',
}
}, function (err) {
if (err) {
e = new Error('Failed to initialize SpookyJS');
e.details = err;
throw e;
}
eval_func_str = eval_func.toString();
spooky.start('http://google.com/',[{
eval_func_str:eval_func_str,
},function(){
eval("eval_func=" + eval_func_str);
console.log('Inside spooky: ' + eval_func());
}]);
spooky.run();
});
spooky.on('console', function (line) {
console.log(line);
});
如果需要函数的值,请传入返回值:
var Spooky;
try {
Spooky = require('spooky');
} catch (e) {
Spooky = require('../lib/spooky');
}
var eval_func = function() {
return 123;
};
console.log('Outside spooky: ' + eval_func());
var spooky = new Spooky({
child: {
transport: 'http',
},
casper: {
logLevel: 'error',
}
}, function(err) {
if (err) {
e = new Error('Failed to initialize SpookyJS');
e.details = err;
throw e;
}
spooky.start('http://google.com/', [{
eval_func: eval_func(),
}, function() {
console.log('Inside spooky: ' + eval_func);
}]);
spooky.run();
});
spooky.on('console', function(line) {
console.log(line);
});
如果需要从SpookyJS调用函数,请尝试“发出”:
这给了你:
Outside spooky: 123
Calling eval_func inside Spooky 123
and... Another value from within Spooky is 42
我认为不能将函数从节点上下文传递到casper上下文。您可以尝试使用不同的名称,因为
eval
是一个现有的JavaScript函数。您是对的,调用函数“eval”是一个愚蠢的想法。我已经编辑了我的问题。
Outside spooky: 123
Calling eval_func inside Spooky 123
and... Another value from within Spooky is 42