检测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这些方法。
最好的祝愿!