2016-06-23 3 views
1

Я получаю ReferenceError, когда я вызываю функцию, которую я определил внутри страницы. Evaluate() Phantom; Каков правильный способ сделать это?PhantomJS: вызов пользовательской/пользовательской функции в phantomjs

, например:

function mySweetFunction(item) { 
    // process item.... 

} 

page.evaluate(function(){ 

    var item= document.getElementsById('item'); 

    mySweetFunction(item); 

}); 

тогда я получу ошибку:

ReferenceError: Can't find variable: mySweetFunction

Что такое правильный способ сделать это?

mySweetFunction довольно большой, и я бы предпочел оставить его на странице. Оцените (...), если это возможно.

ответ

1

Если вы хотите использовать функцию внутри page.evaluate() вы должны поместить его туда первым:

page.evaluate(function(){ 

    function mySweetFunction(item) { 
     // process item.... 
    } 

    var item = document.getElementsById('item'); 

    mySweetFunction(item); 

}); 
+0

да, но функция очень большая, поэтому я хотел сохранить его для ясности .. .. – Xsmael

+2

@Xsmael: К сожалению, это единственный способ сделать это. Функция 'page.evaluate' извлекает функцию, переданную ему как строку, которая затем вводится в интерпретатор javascript страницы в phantom.js (который не является интерпретатором, выполняющим ваш код), чтобы быть eval'd – slebetman

+0

@slebetman thanks для этих деталей улучшилось мое понимание. – Xsmael