[英]Injecting & using Firebug-Lite with PhantomJS
我正在嘗試使用PhantomJS將Firebug和jQuery注入網頁,但我無法訪問它們。
我已經嘗試了兩種PhantomJS方法來向頁面添加其他JS:page.injectJs()和page.includeJs。
我無法從includeJs中獲得任何東西(我不希望從閱讀文檔中獲得)。
在我注入了js()並嘗試使用firebug-lite和jQuery函數或對象(比如$和inspect())之后,我得到的錯誤是它們未定義或無法找到變量。
這是我的完整腳本。 你也可以在這里看到它: http : //piratepad.net/XTPefXOB4o
"use strict";
"use warnings";
var page = new WebPage(), address;
var useragent = "PhantomJS Firebug integration tool (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11";
page.onConsoleMessage = function (msg) {
console.log("+eval:" + msg);
};
page.open(address, function (status) {
if (status !== 'success') {
console.log('Unable to access network');
} else {
console.log("got into page.open()");
var testInclude = page.includeJs("http://getfirebug.com/releases/lite/1.4/firebug-lite.js", function () {
var result = true;
try {
inspect($("*")[5]);
}
catch(err) {
result = false;
}
console.log("from includeJS: " + result);
return result;
// is there any way to return a value from this?
});
var results = page.evaluate( function () {
var debug = [];
try {
page.injectJs("http://getfirebug.com/releases/lite/1.4/firebug-lite.js");
page.injectJs("http://pconerly.webfactional.com/site_media/js/jquery-1.7.min.js");
} catch(err) {
debug[0] = false;
}
debug[0] = true;
debug[1] = true;
try {
// all 3 of these commands fail.
//$(document);
inspect(document.querySelectorAll("*")[i]);
//firebug;
}
catch(err) {
console.log(err.message)
debug[1] = false;
}
//debug[1] = inspectAEl(5);
return debug;
});
var stuff = results;
console.log("did not error on injecting JS: " + stuff[0]);
console.log("used inspect within page.evaluate: " + stuff[1]);
console.log("return value from includeJs: " + testInclude);
console.log("processing finished");
}
phantom.exit();
});
這是我的輸出:
$ phantomjs firebug-integration.js
got into page.open()
+eval:Can't find variable: inspect
did not error on injecting JS: true
used inspect within page.evaluate: false
return value from includeJs: undefined
processing finished
圍繞每個函數的上下文,你有一些困惑:
當您運行includeJs(url, callback)
, callback
函數在PhantomJS上下文中運行。 因此它可以訪問page
,但無法訪問由包含的腳本創建的變量和命名空間 - 這些包含在客戶端上下文中,並且可用於通過page.evaluate()
運行的函數。
您正嘗試在page.injectJs()
運行page.evaluate()
。 這不起作用 - 您在page.evaluate()
運行的函數在客戶端執行上下文中被沙箱化,並且無權訪問page
對象。
所以你應該嘗試其中一種方法 - 在page.includeJs()
回調中運行page.evaluate()
:
page.includeJs("http://getfirebug.com/releases/lite/1.4/firebug-lite.js",
function () {
page.evaluate(function() {
// do stuff with firebug lite here
console.log(inspect($("*")[5]));
});
});
或者運行page.injectJs()
然后運行page.evaluate()
:
// note - this is a reference to a local file
page.injectJs("firebug-lite.js");
page.evaluate(function() {
// do stuff with firebug lite here
console.log(inspect($("*")[5]));
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.