确定用户是否已启用Firebug的surefire方法是什么?
Answers:
检查console
对象(仅使用Firebug创建),例如:
if (window.console && window.console.firebug) {
//Firebug is enabled
}
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') ...
但一般来说,没有必要这样做。
firebug
属性,因此上述条件在Safari中将失败,因此无法检测到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() {};
}
}
})();
可能无法检测到。
Firebug具有多个选项卡,可以分别禁用这些选项卡,并且默认情况下现在不启用它们。
原来的GMail只能告诉我是否启用了“控制台”标签。进一步探测可能需要绕过安全措施,并且您不想去那里。
您可以使用类似的方法来防止代码中的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);
}
请记住,在Chrome窗口中Object console]
。控制台也会返回true或[ 。
此外,我会检查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中应避免。
当前,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!");
您可以在每个萤火虫中测试这些方法。
最良好的祝愿!