4

このスレッドを見て、複雑なオブジェクトを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:

関数でオブジェクトを渡すことを意味します。以下のようですが、動作しません (リターン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();
});
4

2 に答える 2

14

残念ながら、複雑な構造を evaluate() に渡すことはできません。なぜなら、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;
}
于 2013-05-30T14:57:04.690 に答える
2

clientScripts オプションを使用して、jQuery などのスクリプトを渡すことができます — Can i use jQuery with CasperJS。おそらく、カスタム スクリプトに対して同じことを行い、コードを適切に分離することができます。

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-custom-scripts.js:

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

お役に立てれば。

于 2014-05-20T12:17:54.837 に答える