1. ホーム
  2. javascript

[解決済み] Chromeのコンソールが開いているかどうかを確認する

2022-04-21 01:30:15

質問

Firebugが開いているかどうかを調べるために、この小さなスクリプトを使っています。

if (window.console && window.console.firebug) {
    //is open
};

そして、それはうまく動作します。さて、Google Chromeの内蔵Web開発者コンソールが開いているかどうかを検出する方法を30分ほど探していたのですが、ヒントが見つかりませんでした。

これです。

if (window.console && window.console.chrome) {
    //is open
};

は動作しません。

EDITです。

ということで、Chromeのコンソールが開いているかどうかの検出はできないようです。でも、"はあります。 ハック "は動作しますが、いくつかの欠点があります。

  • コンソールをドッキング解除すると動作しません
  • ページロード時にコンソールが開いている場合は動作しません。

しかし、もし誰かが素晴らしいアイデアを思いついたら、その人が回答してくれても構わないし、私は選択した回答を変更します。ありがとうございます。

解決方法は?

requestAnimationFrame (2019年後半)

歴史的な文脈から、これらの過去の回答をここに残しておきます。現在 ムハンマド・ユメルの考え方 は、Chrome 78で動作し、閉じるイベントと開くイベントの両方を検出できるという利点があります。

関数 toString (2019)

クレジット Overcl9ck のコメントで、この答えになりました。正規表現に置き換える /./ を空の関数オブジェクトに置き換えても、まだ動作します。

var devtools = function() {};
devtools.toString = function() {
  if (!this.opened) {
    alert("Opened");
  }
  this.opened = true;
}

console.log('%c', devtools);
// devtools.opened will become true if/when the console is opened

正規表現 toString (2017年~2018年)

元の質問者はもういないようですし、これはまだ受け入れられている答えなので、視認性のためにこの解決策を追加します。謝辞は アントニン・ヒルデブランド 's コメント について ツァン 's 答え . この解決策は toString() は、コンソールが開かれていない限り、ログに記録されたオブジェクトでは呼び出されません。

var devtools = /./;
devtools.toString = function() {
  if (!this.opened) {
    alert("Opened");
  }
  this.opened = true;
}

console.log('%c', devtools);
// devtools.opened will become true if/when the console is opened

コンソール.プロファイル(2013年)

更新しました。 console.profiles はChromeから削除されました。この解決策はもう使えません。

ありがとうございます ポール・アイリッシュ から、この解決策をご指摘いただきました。 ディスカバー・デブツールズ プロファイラを使用しています。

function isInspectOpen() {
  console.profile();
  console.profileEnd();
  if (console.clear) {
    console.clear();
  }
  return console.profiles.length > 0;
}
function showIfInspectIsOpen() {
  alert(isInspectOpen());
}
<button onClick="showIfInspectIsOpen()">Is it open?</button>

window.innerHeight(2011年)

この他のオプションは、ドッキングされたインスペクタを検出することができます。 が開かれた後 しかし、ドッキングされていないインスペクタや、ページロード時にインスペクタがすでに開かれていた場合は検出できません。また、誤検出の可能性もあります。

window.onresize = function() {
  if ((window.outerHeight - window.innerHeight) > 100) {
    alert('Docked inspector was opened');
  }
}