簡體   English   中英

有沒有辦法將對象傳遞給casper.js的evaluate()?

[英]Is there a way to pass object to 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:

我的意思是傳遞帶有函數的對象。 像下面但它不起作用(返回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(),因為傳遞給evaluate()的arg是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();
}); 

有關如何傳遞基本Object以進行評估的示例。

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等腳本 - 我可以將jQuery與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-定制scripts.js中:

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

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM