检测 Firebug 的 Javascript?

IT技术 javascript firebug
2021-03-13 06:09:06

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

6个回答

原答案:

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

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

@Luc:您的意思是碰巧在安装了 Firebug 的情况下使用 Firefox 的开发人员。
2021-04-15 06:09:06
请记住,将您的能力用于好的或令人敬畏的,但不要惩罚萤火虫用户,因为它可以很容易地绕过他们可能感兴趣的任何类型的“复制”或“保存”操作。那将是糟糕的形式。
2021-04-18 06:09:06
Safari确实有一个console对象,但是Safari的console没有firebug属性,因此上面的条件在Safari中会失败,从而检测不到Firebug
2021-04-19 06:09:06
IIRC,在开发人员模式下在 Safari 中使用 console.log 也可以使用 - 因此“仅使用萤火虫创建”的语句可能不正确。
2021-04-29 06:09:06
我刚刚实现了这一点,将开发人员与您网站上的普通用户分开是一个非常好的主意。例如,让他们知道您可以使用的 API!
2021-05-07 06:09:06

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

从 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() {};
        }
    }
})();
我编辑了原始答案并添加了新的有效检测方法
2021-05-13 06:09:06

可能无法检测。

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 开发者控制台支持大多数(如果不是全部)这些方法,但没有 console.firebug。因此,上面的代码在非 Firebug 控制台中禁用了完美工作的控制台方法,这很糟糕。
2021-05-02 06:09:06