有没有办法将对象传递给casper.js'evaluate()?

我看到这个线程,看起来像没有办法传递复杂的对象来evaluate() https://groups.google.com/forum/#!topic/casperjs/x7I8LDFwFJ0

所以,如果我写一个对象,并希望分享不同的evaluate() ,我该怎么做?

让我们来说一些这样的愚蠢的对象,我想一次又一次地使用getData函数:

 var testObj = (function() { var a = 1; function test1(b) { return (a+b); } return { getData : function(arg) { return (test1(3) + arg); } } })(); 

有没有可能的解决方法?

更新1:

我的意思是传递对象的function。 像下面一样,但不起作用(返回null ):

 var casper = require('casper').create(); casper.start('about:blank', function() { var TestObj = function() { var a = 1; function test1(b) { return (a+b); } return { getData : function(arg) { return (test1(3) + arg); } } } var testObj = new TestObj(); this.echo(casper.evaluate(function(myObject ) { return myObject.getData(100); }, testObj)); }); casper.run(function() { this.exit(); }); 

不幸的是,你不能传递一个复杂的结构来评估(),因为传递给evaluate()的任何参数都是JSON.parse(JSON.stringify(arg))。

但这并不意味着你不能通过另一种物体。

关于如何传递一个JSON对象来评估的例子。

 var casper = require('casper').create(); casper.start('about:blank', function() { var JSONObject = { arg1: 'val1' , arg2: 'val2' }; this.echo(casper.evaluate(function(myObject ) { return JSON.stringify(myObject); }, JSONObject)); }); casper.run(function() { this.exit(); }); 

关于如何传递一个基本对象来评估的例子。

 var casper = require('casper').create(); casper.start('about:blank', function() { obj = new Object(); obj.param1 = "value1"; obj.param2 = "value2"; this.echo(casper.evaluate(function(myObject ) { return JSON.stringify(myObject); }, obj)); }); casper.run(function() { this.exit(); }); 

关于如何传递一个带参数的函数来评估的例子。

 var casper = require('casper').create(); casper.start('about:blank', function() { var arg1 = "value1"; var arg2 = "value2"; this.echo(casper.evaluate(myFunction, arg1, arg2)); }); casper.run(function() { this.exit(); }); function myFunction(arg1, arg2) { return arg1 + "-" + arg2; } 

你可以使用clientScripts选项传递像jQuery这样的脚本 – 我可以在CasperJS中使用jQuery吗 ? 你可以做自定义脚本,并有很好的代码分离。

 var casper = require('casper').create({ clientScripts: ["includes/jquery.min.js", "lib/my-custom-script.js"] }); casper.start(function () { this.evaluate(function () { window.customFunction(); }); }); 

LIB / MY-定制scripts.js中:

 window.customFunction = function () { /* do stuff */ }; 

希望这可以帮助。