web-dev-qa-db-ja.com

Firebugを検出するJavaScript?

ユーザーがFirebugを有効にしているかどうかを確認する確実な方法は何ですか?

68
Allan

元の答え:

次のような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') ...

しかし、一般的には、実際にそうする必要はないはずです。

87
Andreas Grech

Firebugが有効な場合、window.consoleは未定義になりません。 console.firebugはバージョン番号を返します。

20
ceejayoz

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() {};
        }
    }
})();
9
skagedal

検出できない場合があります。

Firebugには複数のタブがあり、個別に無効にすることができますが、デフォルトでは無効になっています。

そのままのGmailでは、「コンソール」タブが有効になっているかどうかしかわかりません。これよりも詳細にプローブするには、セキュリティの回避が必要になる可能性が高く、そこに行きたくありません。

4
Kent Fredric

このようなものを使用すると、コードがインストールされていない場合に、コード内の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);
}
3
David Brockman

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では回避する必要があります。

2
nottinhill

現在、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でこれらのアプローチをテストできます。

ご多幸を祈る!

0
Hao Dong