68

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

4

7 に答える 7

87

元の答え:

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

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

于 2008-12-29T17:06:18.510 に答える
20

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

于 2008-12-29T17:05:02.740 に答える
9

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() {};
        }
    }
})();
于 2012-01-08T22:22:34.797 に答える
4

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

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

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

于 2008-12-29T17:13:53.410 に答える
3

このようなものを使用して、コード内の 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);
}
于 2008-12-30T00:01:30.373 に答える
2

Chromeのwindow.consoleでもtrueまたは[を返すことに注意してくださいObject console]

さらに、Firebugがインストールされているかどうかを確認します

if (window.console.firebug !== undefined) // firebug is installed

以下は、FirebugがインストールされていないSafariとChromeで取得したものです。

if (window.console.firebug) // true
if (window.console.firebug == null) // true
if (window.console.firebug === null) // false

Is-True演算子とIs-Not演算子は明らかに型強制を行いますが、JavaScriptでは避ける必要があります。

于 2010-09-19T02:38:55.437 に答える
0

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

幸運をお祈りしています!

于 2013-10-16T03:05:47.273 に答える