簡體   English   中英

從phantom js獲取奇怪的行為

[英]Getting weird behavior from phantom js

我正在使用phantomjs執行以下代碼。 我無法弄清楚這里出了什么問題。

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
        });

    };
}

當我在webpage.open內調用webpage.evaluate時,它創建了一個新的函數范圍,因此我正試圖通過創建參考externalWebPagescope來訪問外部變量,但我無法訪問它。 據我了解閉包這應該工作。

誰能解釋這個。 不知何故,我無法使用phantomjs調試回調代碼,該代碼從未在瀏覽器中命中我的調試器。

page.evaluate內部的PhantomJS函數中,它不僅是一個閉包,它還存在於另一個上下文(網頁的上下文)中,其中所有外部變量和函數都不存在,而是可以使用網頁的DOM。

如果我了解您的意圖,則希望與網頁上下文中的外部上下文進行交互。 有兩種方法:

•您可以從page.evaluate return數據,但它必須是簡單的可序列化對象或數組。

•您可以調用特殊的實用程序函數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

暫無
暫無

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

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