[英]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.