簡體   English   中英

使用PhantomJS注入和使用Firebug-Lite

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

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