2016-06-23 18 views
1

Phantomのpage.evaluate()内で自分自身を定義した関数を呼び出すとReferenceErrorが発生します。それを行う正しい方法は何ですか?例えばPhantomJS:ファントム内のユーザー定義/カスタム関数を呼び出す

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

} 

page.evaluate(function(){ 

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

    mySweetFunction(item); 

}); 

その後、私はエラーを取得します:

ReferenceError: Can't find variable: mySweetFunction

これを行うための適切な方法は何ですか?

mySweetFunctionはかなり大きいので、可能であればpage.evaluate(...)の外に置いておきたいと思います。

答えて

1

あなたは(page.evaluate内の機能を使用する場合)あなたが最初にそこにそれを置く必要があります:

page.evaluate(function(){ 

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

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

    mySweetFunction(item); 

}); 
+0

いやが、しかし機能は本当に大きいですので、私は明確にするためにそれを締め出すたかったです.. .. – Xsmael

+2

@ Xsmael:残念ながら、これは基本的にこれを行う唯一の方法です。 'page.evaluate'関数は、渡された関数を文字列として抽出します。この文字列はphantom.js(コードを実行しているインタプリタではありません)のページのjavascriptインタプリタに挿入され、eval'dになります。 – slebetman

+0

@slebetman thanksこれらの詳細については、私の理解が向上しました。 – Xsmael

関連する問題