2009-04-23 28 views
52

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

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

我想这可能根本不可能,以防止恶意网页垃圾邮件日志?

回答

32

您不能直接从不可信JavaScript(例如来自页面的脚本)写入控制台。然而,即使安装Firebug不吸引你,我建议检查Firebug Lite,这不需要安装到浏览器中(事实上,它甚至不需要Firefox)。这是一个可以包含到任何网页(甚至是动态的)的脚本,它会给你一些基本的Firebug功能(如console.log())。

+0

有趣的是,我会牢记这一点。 – 2009-04-23 22:06:37

+0

而在* * SeaMonkey的浏览器(这也是*壁虎*的),你可以通过`browser.dom.window.console.enabled`隐藏偏好启用记录到JavaScript控制台(因为2.11,见[错误739965] (https://bugzilla.mozilla.org/show_bug.cgi?id=739965))。这不会影响* FireBug *,因为所有`console.log(...)`结果都会立即显示在其控制台中,而不管前缀如何。 – Bass 2016-02-11 15:15:28

3

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

+0

+1 Components.utils.reportError - 我总是忘记它是如何的号召,浪费时间找了一遍,一遍又一遍! – Stefano 2011-09-07 11:40:24

6

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

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

当然,这将打破你出去,你当前正在执行的代码,所以你不能用它来详细的日志记录,但如果你可以解决这个问题,我认为这是获得开箱即用的唯一方法。

+0

我并不反对安装Firebug(我现在已经拥有),我只是想知道。显式抛出错误不是一种选择,因为我正在跟踪我的代码。 – 2009-04-23 22:05:09

+2

如果你想要一个非阻塞的错误信息(例如,监控一个循环中的变量),使用setTimeout(“throw new Error('Wheeeeeeee!')”,0); – 2009-12-15 20:09:28

+2

bazquux完全是我想通知自己的错误类型 – bobobobo 2010-01-18 04:30:33

1

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

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

看看引擎盖下,你就会明白我的意思的“便宜”。 :-)

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

萤火虫萤火虫和精简版绝对是更好的图形用户界面,但我用我家种的一个时刻都在保持安全记录,甚至生产代码 - 没有不变评论&取消注释,

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) 

更新到一个真正的功能

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

+5

至少使用一个真正的功能而非eval'd串...... – nornagon 2011-04-29 01:23:04

46

如果你定义一个全局函数来检查window.console的存在,你可以使用Firebug的追踪和仍然起着很好的与其他浏览器和/或如果你打开Firebug的控制台跟踪功能:

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

debug("foo!"); 
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? 
} 
14

window.console在火狐4测试版6未定义即使萤火虫1.6X.0b1是可能因为权限问题,其他人讨论启用并开放。然而,Firefox 4有一个新的工具> Web控制台,如果这是开放的,你有一个window.console对象和页面上的不受信任的JavaScript代码可以使用console.log()。 Web控制台不稳定(请参阅https://wiki.mozilla.org/Firefox/Projects/Console),您可能需要更改about:config,YMMV中名为devtools。*的设置。

0

今天我有一个问题,并注意到控制台萤火虫有不同的标签,而我的是净化信息中,你必须为了看的console.log工作,而trowing错误选择ALL选项!这样简单! ; ^)