Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测Firebug的Javascript?_Javascript_Firebug - Fatal编程技术网

检测Firebug的Javascript?

检测Firebug的Javascript?,javascript,firebug,Javascript,Firebug,检测用户是否启用了Firebug的可靠方法是什么?如果启用了Firebug,window.console将不会被取消定义。console.firebug将返回版本号。原始答案: 检查控制台对象(仅使用Firebug创建),如: if (window.console && window.console.firebug) { //Firebug is enabled } 更新(2012年1月): Firebug开发人员已经成功了。您仍然可以通过类似的方法检测Firebug的存

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

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

原始答案: 检查
控制台
对象(仅使用Firebug创建),如:

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

更新(2012年1月): Firebug开发人员已经成功了。您仍然可以通过类似的方法检测Firebug的存在

或者


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

可能无法检测到

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


GMail目前只能告诉我是否启用了“控制台”选项卡。进一步的探测可能需要安全规避,而你不想去那里

如果代码中没有安装firebug,您可以使用类似的方法来防止代码中的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);
}
if (window.console.firebug) // true
if (window.console.firebug == null) // true
if (window.console.firebug === null) // false

请记住,Chrome window.console也会返回true或[
对象控制台]

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

if(window.console.firebug!==未定义)//安装了firebug


下面是我在Safari和Chrome中得到的,没有安装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);
}
if (window.console.firebug) // true
if (window.console.firebug == null) // true
if (window.console.firebug === null) // false

操作符显然执行类型强制,这在JavaScript中应该避免。

从Firebug版本1.9.0开始,
控制台。Firebug
不再定义,因为隐私问题;见这打破了上述方法。事实上,它将艾伦问题的答案改为“没有办法”;如果有其他方法,它被认为是一个bug

相反,解决方案是检查
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() {};
        }
    }
})();
(函数(){
变量名称=['log'、'debug'、'info'、'warn'、'error'、'assert'、'dir'、'dirxml',
“组”、“组结束”、“时间”、“时间结束”、“计数”、“跟踪”、“配置文件”、“配置文件结束”];
if(window.console){
对于(var i=0;i
目前,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!");
您可以在每个firebug中测试这些方法


致以最良好的祝愿

请记住,使用你的超能力是好的,或是很棒的,但不要惩罚firebug用户,因为这样可以很容易地绕过他们可能感兴趣的任何类型的“复制”或“保存”操作。这是一个糟糕的form.IIRC,在Safari中使用console.log并启用开发者模式也可以工作-因此“仅使用firebug创建”语句可能不正确。Safari确实有一个console对象,但Safari的控制台没有
firebug
属性,因此上述条件在Safari中会失败,因此,没有检测到Firebugi,我刚刚实现了这一点,将开发者与站点上的普通用户分开是一个非常好的主意。例如,让他们知道您可供他们使用的API@吕克:你是说那些碰巧使用Firefox并安装了Firebug的开发人员。顺便问一下:你需要它干什么?想知道你是否可以在firebug的控制台上写东西?这真是糟糕的风格。例如,Chrome开发者控制台支持这些方法中的大多数(如果不是全部的话),但没有console.firebug。因此,上面的代码禁用了非Firebug控制台中完美工作的控制台方法,这很糟糕。实际上,要检查是否定义了某些内容,应该使用“if(typeof window.console.Firebug!=='undefined')”。我编辑了原始答案并添加了新的工作检测方法