Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以使用spookyjs从casperjs范围中的节点范围调用求值函数?_Javascript_Node.js_Phantomjs_Casperjs_Spookyjs - Fatal编程技术网

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