14

Twitterのログインページに移動し、コンソールに次のように入力します。

window.addEventListener('keypress', function(e){console.log('hello')}, true)

(注:trueイベントキャプチャを有効にする3番目のパラメータの設定方法。これにより、子要素によって消費される前に、イベントが最初にウィンドウによってインターセプトされます。)

いくつかのキーを押してみてください。helloコンソールに出力されないことに注意してください。イベントリスナーを追加しても、何も変更されkeydownませkeyupん。

helloほとんどのWebサイトで出力されますが、TwitterやGmailなどのサイトでは出力されません。

なんで?イベントリスナーを停止しているのは何ですか?

編集:Firefoxで期待どおりに動作するようです。しかし、Chromeではありません。Chromeが期待どおりにイベントリスナーを起動しないのはなぜですか?

編集2:以下の数人が推測してconsole.logいるように、TwitterやGmailなどのサイトのChromeでは空の関数です。何故ですか?

4

5 に答える 5

17

これらのサイトは(明らかにWebkit用に)特別に設定されているため:

console.log = function(){};

ただし、Chromeではlog()、コンソールで次のコマンドを発行することにより、元の機能を復元できます。

console.log = console.__proto__.log

次に、これを行うことができます:

window.addEventListener('keypress', function(e){console.log('hello')}, true)

そして、それは期待どおりに機能するはずです。

于 2012-09-26T23:14:27.343 に答える
3

iframeから取得します。

function setConsole() {
  var iframe = document.createElement('iframe');
  iframe.style.display = 'none';
  document.body.appendChild(iframe);
  console = iframe.contentWindow.console;
  window.console = console;
}

(そしてそれを呼びます)

setConsole()

ソース:https ://gist.github.com/cowlicks/a3bc662b38c36483b35f74b2b54e37c0

于 2017-10-28T23:58:27.960 に答える
2

console.log()開発者は、トラブルシューティング/デバッグのためにコードにステートメントを入れるのが好きです。時々、彼らは本番コードをチェックインするときにそれらをすべて取り出すのを忘れます。これに対する簡単な安全策はconsole.log()、本番コードで何もしない空の関数として再定義することです。これにより、開発者が誤って関数を残した場合でもconsole、デバッガーを実行していないときにオブジェクトがない場合に出力が発生したり、例外がスローされたりすることはありません。 (IEのように)。

一部のブラウザは、このように上書きできないように読み取り専用にすることで、その関数の置き換えを防ぐことができますが、そうする場合は、コンソールオブジェクトが存在する必要があるため、時折のconsole.log()ステートメントによる害はありません。console.log()これらの残りのステートメントの主な害はconsole、デバッガーが実行されていない限りオブジェクトが存在しないために例外がスローされるIEにあります。

于 2012-09-26T23:48:38.450 に答える
0

console.logに問題があります。代わりにこれを試してください:

window.addEventListener('keypress', function(e){alert('hello')}, true)
于 2012-09-26T23:27:26.100 に答える
0

この問題はFirefoxでは発生しません。

Chromeを確認しましたが、どうやら何らかの理由でGmailとTwitterのページでconsole.logが空の関数function () {}に再割り当てされたため、ハンドラーが呼び出されましたが、何も実行されません。console.logの代わりに試してみるとalert()、機能していることがわかります。

面白い。

于 2012-09-26T23:27:56.397 に答える