首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PhantomJS注入和使用Firebug-Lite

用PhantomJS注入和使用Firebug-Lite
EN

Stack Overflow用户
提问于 2012-03-15 21:46:47
回答 1查看 1.7K关注 0票数 0

我试图使用jQuery将Firebug和PhantomJS注入到网页中,但我无法访问它们。

我尝试过两种PhantomJS方法来将其他JS添加到页面: page.injectJs()和page.includeJs。

我无法从包含‘t中得到任何返回信息(我不希望从文档中得到这些信息)。

在我注入‘t()并尝试使用firebug-lite和jQuery函数或对象(如$和try ())之后,我会收到错误,说明它们是未定义的,或者找不到变量。

这是我的完整剧本。您还可以在这里看到它:http://piratepad.net/XTPefXOB4o

代码语言:javascript
复制
"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();
});    

这是我的输出:

代码语言:javascript
复制
$ 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
EN

回答 1

Stack Overflow用户

发布于 2012-03-15 22:01:33

您在每个函数的上下文中都有一些混淆:

  • 运行includeJs(url, callback)时,callback函数在PhantomJS上下文中运行。因此,它可以访问page,但不能访问由包含的脚本创建的变量和命名空间--这些变量和命名空间包含在客户端上下文中,并且可以用于通过page运行的函数,这些函数试图在page.evaluate()中运行page.injectJs()。这是行不通的--在page.evaluate()中运行的函数在客户端执行上下文中是沙箱化的,并且不能访问page对象。

因此,您应该尝试以下方法之一--要么在page.evaluate()回调中运行page.includeJs()

代码语言:javascript
复制
    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()

代码语言:javascript
复制
// 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]));
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9728673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档