从JavaScript登录到Firefox错误控制台

时间:2009-04-23 21:47:54

标签: javascript firefox debugging

是否可以通过网页中运行的JavaScript代码向Firefox的内置错误控制台添加消息?

我知道我有Firebug,它提供了一个console对象和它自己的错误控制台,但我之前正在寻找一个快速修复,但找不到任何东西。

我想可能根本不可能阻止恶意网页发送垃圾邮件?

9 个答案:

答案 0 :(得分:46)

如果您定义一个检查window.console是否存在的全局函数,您可以使用Firebug进行跟踪,并且仍可以与其他浏览器一起使用和/或如果您关闭Firebug的控制台跟踪:

debug = function (log_txt) {
    if (typeof window.console != 'undefined') {
        console.log(log_txt);
    }
}

debug("foo!");

答案 1 :(得分:33)

是的,你可以= P

function log(param){
    setTimeout(function(){
        throw new Error("Debug: " + param)
    },0)
}

//Simple Test:
alert(1)
log('This is my message to the error log -_-')
alert(2)
log('I can do this forever, does not break')
alert(3)

更新到实际功能

这是一个简单的黑客,只是为了好玩。

答案 2 :(得分:32)

您无法直接从不受信任的JavaScript(例如来自页面的脚本)写入控制台。但是,即使安装Firebug对您没有吸引力,我建议您查看Firebug Lite,这不需要安装到浏览器中(事实上,它甚至不需要Firefox)。这是一个可以包含在任何网页中的脚本(甚至是动态的),它将为您提供一些基本的Firebug功能(例如console.log())。

答案 3 :(得分:14)

即使Firebug 1.6X.0b1已启用并打开,

window.console在Firefox 4 beta 6中未定义,可能是因为其他人讨论的权限问题。但是,Firefox 4有一个新工具> Web控制台,如果打开它,您有一个window.console对象,页面上不受信任的JavaScript代码可以使用console.log()。 Web控制台不断变化(请参阅https://wiki.mozilla.org/Firefox/Projects/Console),您可能需要在about:config,YMMV中更改名为devtools。*的设置。

答案 4 :(得分:6)

我只需安装Firebug并使用console.log。但是,如果你不能这样做,你总是会抛出一个错误:

throw "foobar";
throw new Error("bazquux");

当然,这会让你脱离正在执行的代码,所以你不能用它来进行详细的日志记录,但如果你可以解决这个问题,我认为这是获取某些东西的唯一方法的盒子。

答案 5 :(得分:3)

AFAIK,这是不可能的。但是,如果您对Firefox中的扩展如何与错误控制台进行交互感兴趣,check this out

答案 6 :(得分:2)

此功能不需要任何扩展名或库。但是,它授予相关网站完全权限。不用担心,因为你是发展它的人,对吗?


// Define mylog() function to log to Firefox' error console if such a
// thing exists
function defineMyLog()
{
    // Provide a useless but harmless fallback
    mylog = function(msg) { };
    // return; // disable in production

    if (typeof(netscape) === "undefined") {
        // alert("Logging implemented only for Firefox");
        return;
    }
    // The initial auth popup can be avoided by pre-setting some magic user_pref
    //  ( "capability.principal.codebase.p0.granted", "UniversalXPConnect"), etc.
    try {
        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
    } catch (e) { // User has denied privileges
        // alert(e.name + ": " + e.message);
        return;
    }
    ffconsoleService = Components.classes["@mozilla.org/consoleservice;1"]
                                 .getService(Components.interfaces.nsIConsoleService);
    mylog = function (msg)
    {
        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
        ffconsoleService.logStringMessage(new Date().toLocaleTimeString() + ": " + msg);
    }
    mylog("Firefox logging function has been defined");

    // window.open("javascript:"); // this URL does not work anymore?
}

答案 7 :(得分:1)

如果您有兴趣,请查看我写的脚本 - 这是一个“便宜”的Firebug替代品,它不会干扰任何普通的控制台(如Safari或Chrome),但会使用几乎所有的Firebug方法扩展它:

http://code.google.com/p/glentilities/

看看引擎盖,你会看到“便宜”的意思。 : - )

将它与YUI或json.org的JSON序列化器结合使用,以对sorta复制console.dir进行排序。

Firebug和Firebug Lite绝对是更好的图形用户界面,但是我一直使用我自己开发的GUI,即使对于生产代码也能安全地保存日志 - 没有持续评论&取消注释,

答案 8 :(得分:0)

我今天遇到了一个问题,并注意到Firebug中的控制台有不同的标签,我的是Depuration Information,你必须选择ALL选项才能看到console.log工作而不会出现错误!很简单! ; ^)