2016-04-03 13 views
2

私はthe source code hereを通して読んでいます。これは、コンソールが開いているときを検出します。どのように.__ defineGetter__を使用して、ブラウザのコンソールが開いているかを検出することができます

私はいくつかのことで混乱しています。

まず、コンソールが開いていることがどのように検出されるかわかりません。それはplay()機能をトリガaudioCheck === trueなるように戻り以下

if(audioCheck === true || (window.Firebug && window.Firebug.chrome && window.Firebug.chrome.isInitialized)) { 
    play(); 
} 

線が不定。

window.Firebug && window.Firebug.chrome && window.Firebug.chrome.isInitialized 

それはtrueaudioCheckを設定し、次の行です。私は__defineGetter__に関するいくつかの調査を行ったが、それは私にとっては不明なままである。

audioElement.__defineGetter__('id', function() { 
    audioCheck = true; 
}); 

これは何を説明できますか?私は多くの研究の後にそれを理解することができません。

そして最後にどのような完全に私をスローすると、私はこの行を削除した場合、音声が再生されないということです。

console.log("Check the console: ", audioElement); 

これが唯一のコンソールに情報を記録する必要がありますけれども、私が持っているだろうとこれは本当に奇妙です、音が再生されているかどうかには何の影響もありませんが、これは同じでなければなりません。__defineGetter__

ここには数多くの質問があります。

答えて

1

私はこれを確認するために、任意の源を知りませんが、ほとんどの場合、あなたが経験している行動は、あなたがconsole.log()を発行し、そのようなHTML要素を渡すと近代的なブラウザのコンソールは通常—を何の効果であります引数を指定すると、コンソールはIDなどの詳細を表示しようとします。 __defineGetter__行は、ブラウザがIDにアクセスしたときに、偽のゲッター関数が呼び出されることを保証します(__defineGetter__()は—を設定する標準的な方法ではありません)。の—をgetterプロパティに置き換えます。かなりスマートですね。

おそらく、問題を完全に理解して検証するには、さまざまなブラウザのソースコードを分析する必要があります。
ゲッターについては、MDN:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/getを参照してください(そこに記載されている標準的な方法はObject.defineProperty()です)。

+0

あなたは死んでいます。私も著者に尋ねたところ、彼はちょうど答えました。ありがとう! –

+0

コンソールでDOM要素のゲッターを実行してIDを見つけた場合には、うーん、バグのように聞こえる... – Bergi

+0

@Bergi ChromeやOperaの最新の安定版やIE11でも問題は多かれ少なかれ再現されました。 Firefoxには影響しないようです(HTML要素についての余分なデータも表示します)。 – rhino

関連する問題