2013-09-29 2 views
0

Я пытаюсь вызвать функцию, определенную в другом модуле, используя this.evaluate().

фрагмент кода (вызов функции) является:

this.waitFor(function check() { 
    var re = this.evaluate(universe.answer(couponElement, url)); 
    if (re != 'no' & re!='yes' & re!=null) { 
     couponObj.push(re); 

и модуль, в котором определена функция, как это:

var require = patchRequire(require); 

var utils = require('utils'); 
exports.answer = function(couponElement, url) { 
    var lblInvalidCoupon = 'lblInvalidCoupon'; 
    var tolTipCouponinner='tolTipCouponinner'; 
    var txtFCCoupondisocunt = 'txtFCCoupondisocunt'; 
    var btnRemoveFCCoupon = 'btnRemoveFCCoupon'; 

    var check = $('#txtCouponCode').css('backgroundImage'); 
    if (check.indexOf('ajax-loader.gif')>-1){   
     return 'no'; 
    } else { 
     if (document.getElementById(lblInvalidCoupon)!=null){ 

В принципе, я хочу, чтобы вызвать функцию, используя this.evaluate, но не может этого сделать.

+0

Вы проверили, что на удаленной странице загружен jQuery? Вы можете сделать это, посетив страницу в своем браузере и пытаясь использовать функцию jQuery с инструментами разработчика браузера. – hexid

+0

Возможный дубликат [В JavaScript, имеет ли значение, если я вызываю функцию с круглыми скобками?] (Http://stackoverflow.com/questions/3246928/in-javascript-does-it-make-a-difference-if -i-называть-а-функцию-с-скобок) –

ответ

0

Во-первых, попробуйте с простейшим evaluate: remote.message Событие для захвата console.log со страницы.

casper.on("remote.message", function(msg) { 
    console.log("[page] " + msg); 
}); 

this.evaluate(function() { 
    console.log("Hi phantomworld! I am hello-ing from remote page!"); 
}); 

Далее проверьте, если JQuery присутствует:

this.evaluate(function() { 
    console.log(typeof jQuery); 
}); 

Если он говорит, [page] function, JQuery является присутствует на странице. Вам нужно выкопать больше ...

Если нет, то вводить его:

var casper = require('casper').create({ 
    clientScripts: [ 
     'includes/jquery.js' 
    ] 
});  
-3

Вы фактически не передать функции answer к casper.evaluate, но вы назвали его вместо этого. Проблема в том, что таким образом answer не был выполнен в контексте страницы, и из-за этого $ не определен. casper.evaluate, который выполняет функцию в контексте страницы, изолирован. Он не может использовать переменные, определенные снаружи. Передаваемая функция должна быть автономной.

Чтобы исправить это, аргументы, которые потребляются answer, могут быть переданы как дополнительные параметры для casper.evaluate.

Изменение линии

var re = this.evaluate(universe.answer(couponElement, url)); 

в

var re = this.evaluate(universe.answer, couponElement, url); 

Если JQuery нет на странице, Вы должны следовать sudipto's answer.

Смежные вопросы