2012-08-15 1 views
6

私は、テキストエリアでキーボードイベントをキャプチャすることに依存するJavascriptアプリケーションを使用しています。 Firebug(1.10.2)を使ってFirefox(14.x)上でテストしてデバッグしている間、ブレークポイントをアクティブにしてデバッガが動作しているとき、アプリケーションの動作が異なっていることに気付きました。Firebug(または他のウェブデバッガ)がデバッグに使用されたタイミングを検出します

私はFirebugを検出する方法を知っていますが、Firebugが実際にデバッグに使用されているときに(Javascriptで)検出することが可能かどうかを知りたいと思いますか?

編集:ここにいくつかのランダムなサイトの入力ボックスに

This site漁獲キーイベントの例があり、文字コードを出力し、テキスト表現と押されたキー(すなわち代わる「入力」についてEnterキー)または大文字(文字の場合)。

私はChromeでデバッグし、リスナー機能にブレークポイントを設定すると、スクリプトを再開するときにブレークポイントに達すると何も起こりません。通常はテキストが通常どおり出力されます。

FirefoxでFirebugでデバッグするとき:以前は "e"の文字を押して、入力バーに "E"の文字が含まれているとしましょう。ブレークポイントをオンにし、文字「z」を押します。 Firebugはブレークポイントで停止しますが、入力バーには "E"ではなく "Ez"というテキストが表示されます。スクリプトを再開すると、このテキストは "Z"に置き換えられます。

別のFirefoxデバッガ(Venkman 0.9.89)を試してみましたが、同じことが起こりました。だから私の推測は、これはFirefoxの問題ではなく、デバッガの問題です。だから、より一般的な質問かもしれないが、それはいつJavascriptコードがデバッグされていることが検出できますか?

+13

これは非常に奇妙な要件です。アプリケーションの動作はどう違うのですか?おそらく、アプリケーションの動作を回避しようとするよりも、アプリケーションの動作に対処して修正する必要があります。通常、デバッグ時には異なる動作をしてはいけません。その背後にはアーキテクチャ上の問題があるかもしれません。そこにある他の多くのデバッガはどうですか?それらをすべて検出しなければならないでしょう... –

+0

Firebugが動作していない場合でもブレークポイントやその他の相違点がなくても、Firebugが動作しているときは、動作が異なりますか? –

+0

私はイベントをキャプチャして処理し、それを防止しています。作業を行うメソッドをデバッグしている間、イベントは実際にはメソッドが呼び出される前に発生するため、私はそれを防ぐことができません。 Firebugがオフになっている間に私のアプリケーションが動作するので、この動作はFirefoxの問題ではないと思います。別のデバッガを見つけることは私には起こりませんでした。アイデアに感謝します!また、Firebugはオンになっていますが、デバッグはしていませんが、すべて正常に動作しています。 – Bikush

答えて

2

これは私がFirebugのを検出するために行うものです。

if (window.console && (window.console.firebug || window.console.exception)) { 
    // At this point, Firebug is enabled 
} 

それが唯一の古いバージョンのために動作しますが、最初のテストは、コンソールが実際に二番目はFirebugのためにテストするが存在することを確認することが重要ですそれ。 Firebugが "exception"を追加すると、3番目のものがそこにあります。これは、Firebugのプラグインによってプロパティ "exception"が追加されたためです。

(関連はありませんが興味を持って:window.console.exceptionがコンソール上にメッセージを表示するためにFirebugので使用される方法です。たとえば、次のように入力します。

>>> window.console.exception("A message", {param:'Value'}) 

あなたがダンプで、非常に見覚えがあるだろうエラーが表示されます。渡されたオブジェクトの!

傭兵。

+0

私は私の質問で私はこの小切手について知っていると述べた。どうもありがとう! Firebugの開発者はwindow.consoleからFirebugオブジェクトを削除して以来、誰かがこれに問題を抱えており、この回答が役立つかもしれません。 – Bikush

+0

あなたの質問に 'window.console.exception'や' window.console.firebug'への参照がありません!しかし、私は目が見えないかもしれません。質問に答えると思ったら私の答えを受け入れてください! – Merc

+0

私の質問は、Firebugの存在ではなく、実際のデバッグプロセスを検出する方法でした。 – Bikush

0

さて、この答えは、誰かを助けることを願っています。我々は、デバッグ

Let関数で、このデバッグ検出コードを追加し

function debugged() 
{ 
    debugger; 
} 
setTimeout(debugged, 3000); 

::のようなことが、我々はいくつかの場所でオープンデバッガでそれを実行した場合ので、それはブレークポイントとデバッグイベントをトリガします

setTimeout(this.x = function(a){ s = Math.abs(new Date() - a.c - 1000); a.c = new Date(); setTimeout(a.foo,1000, a); if(s>100)console.log("debug") },1000, {c: new Date(), foo:this.x}) 

することができます(catchedされますコンソールに表示される「デバッグ」という言葉を参照してください)。これは概念です。検出期間の時間とデバッグフラグを上げる方法を変更することができます。シングルスレッドのJavaScriptのおかげで。

関連する問題