68

检测用户是否启用了 Firebug 的可靠方法是什么?

4

7 回答 7

87

原答案:

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

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') ...

但总的来说,实际上应该没有必要这样做。

于 2008-12-29T17:06:18.510 回答
20

如果启用了 firebug,window.console 将不会未定义。console.firebug 将返回版本号。

于 2008-12-29T17:05:02.740 回答
9

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

相反,解决方案是检查可用性console.log或您想要使用或替换的任何内容。

这是一个替换 David Brockman 上面介绍的那种代码的建议,但不会删除任何现有函数。

(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() {};
        }
    }
})();
于 2012-01-08T22:22:34.797 回答
4

可能无法检测到。

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

GMail 只能判断我是否启用了“控制台”选项卡。比这更深入的探测可能需要安全规避,你不想去那里。

于 2008-12-29T17:13:53.410 回答
3

如果未安装,您可以使用类似的方法来防止代码中的 firebug 调用导致错误。

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);
}
于 2008-12-30T00:01:30.373 回答
2

请记住,在 Chrome 中 window.console 也返回 true 或 [ Object console]

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

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

以下是我在 Safari 和 Chrome 中得到的,没有安装 firebug。

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

Is-True 和 Is-Not 运算符显然会进行类型强制,这在 JavaScript 中应该避免。

于 2010-09-19T02:38:55.437 回答
0

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

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!");

您可以在每个萤火虫中测试这些方法。

最良好的祝愿!

于 2013-10-16T03:05:47.273 回答