アプリケーションに function.apply と function.call を try/catch ブロックでラップするコードがあります。エラーをキャッチし、arguments.caller を使用して疑似スタックを構築するのに便利ですが、IE のデバッガーで大混乱を引き起こします。
URL パラメーターでラッピングをオフにすることはできますが、デバッガーが接続されている場合は自動的にオフにしたいと考えています。デバッガーを検出する方法が見つかりません。何か案は?
アプリケーションに function.apply と function.call を try/catch ブロックでラップするコードがあります。エラーをキャッチし、arguments.caller を使用して疑似スタックを構築するのに便利ですが、IE のデバッガーで大混乱を引き起こします。
URL パラメーターでラッピングをオフにすることはできますが、デバッガーが接続されている場合は自動的にオフにしたいと考えています。デバッガーを検出する方法が見つかりません。何か案は?
IE8 の場合はわかりませんが、デバッガーが IE9/IE10/IE11 で実行されているかどうかは、以下を確認することで検出できます。
var isIeDebugging = !!window.__IE_DEVTOOLBAR_CONSOLE_COMMAND_LINE || ('__BROWSERTOOLS_DOMEXPLORER_ADDED' in window);
たとえば、http://jsbin.com/IJOwuje/5を参照してください。
ただし、IE9/IE10 では、デバッガーが閉じられた場合でも、デバッガーを一度だけ実行したウィンドウに対して true に設定されます。
また、IE11 では、さまざまな window.__BROWSERTOOLS* キーが、開いているか使用されているデバッガー タブに応じてのみ表示されるように見えるため、デバッグ フレームが開いているかどうかを確認するのに 100% 信頼できるわけではありません...
これはあなたが望んでいた答えではありませんが、私は過去に、URL にハッシュがある場合は、次のような秘密のコードをチェックすることから始まるローダー JS を少し用意することでこれを処理しました。
mysite.com/#mXVa
そのため、ローダーがチェックし、location.hash == 'mXVa' の場合、ローダーは縮小されたエラーを多用するさまざまなスクリプトではなく、ページ上のすべてのスクリプトのデバッグ バージョンをロードします (try/catch などはありません)。