2017-08-25 4 views
0

私は以下のコードを実行するためにphantomjsを使用しています。 ここで何が間違っているのか分かりません。ファントムjsから奇妙な動作を取得する

function process(arg1, arg2) { 

    var webpage = require('webpage').create(); 

    webpage.onConsoleMessage = function(msg) { 
     // something 
    }; 

    webpage.onError = function(msg, trace) { 

     // something 
    }; 

    webpage.open(entityResolvedFilePath, function(status) { 
     if (status !== 'success') { 

      abort(ErrorCode['HTML_LOAD_FAILURE']); 

     } else { 

      injectScriptsToWebpage(webpage); 

      if (inputParams['myExpression']) { 

       var outerWebPagescope=webpage; 
       window.wepPage=webpage; 
       webpage.evaluate(function() { 

        if (hasRequiredNoides(document)) { 
         //do something 
        } 
        else { 

         //outerWebPagescope.onCallback(); this also doesn't works 
         wepPage.onCallback(); 
        } 
       }); 
      } 
      else { 
       webpage.onCallback(); 
      } 
     } 
    }); 

    webpage.onCallback = function() { 

     webpage.evaluate(function(inputParams) { 
      //do something 
     }); 

    }; 
} 

私は参照を作成outerWebPagescopeによって外側変数にアクセスするトリングが、私はそれにアクセスすることができませんので、それは新しい関数スコープを作成webpage.open内webpage.evaluateを呼び出しています。 閉鎖を理解する限り、これはうまくいくはずです。

誰でも私にこれを説明できますか? 何らかの理由で私はphantomjsを使用してコールバックコードをデバッグすることができません。そのコードはブラウザでデバッガにヒットしません。

答えて

0

page.evaluate内のPhantomJS関数では、すべての外部変数と関数が存在しない代わりにWebページのDOMを使用できる別のコンテキスト(Webページのもの)のアノードとして存在します。

あなたの意図を理解している場合は、ウェブページのコンテキストから外部コンテキストとやりとりしたいと考えています。

returnデータはpage.evaluateですが、単純なシリアライズ可能なオブジェクトまたは配列でなければなりません。

あなたは相互作用のようなもののためにspcifically Webページに注入され、特別なユーティリティ関数window.callPhantom呼び出すことができます:

page.evaluate(function(){ 
    if (typeof window.callPhantom === 'function') { 
     window.callPhantom({ hello: 'world' }); 
    } 
}); 

page.onCallback = function(data) { 
    console.log('CALLBACK: ' + JSON.stringify(data)); 
    // Prints 'CALLBACK: { "hello": "world" }' 
}; 

ドキュメント:応答のためのhttp://phantomjs.org/api/webpage/handler/on-callback.html

+0

おかげで、私は常に未定義としてwindow.callPhantomを取得します。 –