检测Firebug的Javascript?

什么是检测用户是否启用了Firebug的绝对方法?

原始答案:

检查console对象(仅用Firebug创build),如下所示:

 if (window.console && window.console.firebug) { //Firebug is enabled } 

更新(2012年1月):

Firebug开发者决定删除window.console.firebug 。 你仍然可以通过鸭子打字来检测Firebug的存在

 if (window.console && (window.console.firebug || window.console.exception)) { //Firebug is enabled } 

或者其他各种方法

 if (document.getUserData('firebug-Token')) ... if (console.log.toString().indexOf('apply') != -1) ... if (typeof console.assert(1) == 'string') ... 

但一般来说,实际上并不需要这样做。

如果萤火虫启用,window.console将不会被定义。 console.firebug将返回版本号。

从Firebug 1.9.0开始,由于隐私问题, console.firebug不再被定义。 请参阅发行说明 , 错误报告 。 这打破了上述方法。 事实上,它将艾伦的问题的答案改变为“没有办法”。 如果有另一种方式,这被认为是一个错误。

解决方法是检查console.log的可用性,或者是否要使用或replace。

这是一个替代David Brockman上面介绍的代码的build议,但是不能删除任何现有的function。

 (function () { var names = ['log', 'debug', 'info', 'warn', 'error', 'assert', 'dir', 'dirxml', 'group', 'groupEnd', 'time', 'timeEnd', 'count', 'trace', 'profile', 'profileEnd']; if (window.console) { for (var i = 0; i < names.length; i++) { if (!window.console[names[i]]) { window.console[names[i]] = function() {}; } } } else { window.console = {}; for (var i = 0; i < names.length; i++) { window.console[names[i]] = function() {}; } } })(); 

可能无法检测到。

Firebug有多个选项卡,可以单独禁用,现在默认情况下不启用。

GMail,因为它只能告诉我是否有“控制台”选项卡启用。 进一步探索可能需要安全规避,你不想去那里。

你可以使用这样的东西,以防止代码中的萤火虫调用,如果没有安装导致错误。

 if (!window.console || !console.firebug) { (function (m, i) { window.console = {}; while (i--) { window.console[m[i]] = function () {}; } })('log debug info warn error assert dir dirxml trace group groupEnd time timeEnd profile profileEnd count'.split(' '), 16); } 

请记住在Chrome浏览器window.console也返回true或[ Object console]

此外,我会检查是否安装了Firebug

if (window.console.firebug !== undefined) // firebug is installed

下面是我在Safari和Chrome中得到的,没有安装萤火虫。

 if (window.console.firebug) // true if (window.console.firebug == null) // true if (window.console.firebug === null) // false 

Is-True和Is-Not运算符显然是强制types的,这在JavaScript中应该避免。

目前,window.console.firebug已被最新的萤火虫版本删除。 因为firebug是一个基于扩展的JavaScriptdebugging器,它在window.console中定义了一些新的函数或对象。 所以大多数时候,只能使用这个新定义的函数来检测萤火虫的运行状态。

 if(console.assert(1) === '_firebugIgnore') alert("firebug is running!"); if((console.log+'''').indexOf('return Function.apply.call(x.log, x, arguments);') !== -1) alert("firebug is running!"); 

你可以在每个萤火虫中testing这些方法。

最好的祝愿!