2

私はいくつかのオンラインの例でIEを検出するこの方法を見てきました:

if (/*@cc_on!@*/false) { // check for Internet Explorer

これは、IEがHTMLで認識する条件付きコメントに似ていますか?

4

3 に答える 3

3

このステートメントは、IEでのコメントコンテンツの条件付きコンパイルを制御します。IEがこのコメントを見ると、実際にはコメントブロックの内容を純粋なコードとしてコンパイルします。!これで、コメント内のでトリックが発生します。

IEは、!ソースに書き込まれたかのようにコンパイルするため、コードはとして処理されますがif (!false)、他のすべてのブラウザーはそれをとして処理しますif (false)

于 2012-04-09T12:01:41.500 に答える
1

マイクロソフトは、これについていくつかの役立つ洞察を提供しています。

この宣言は、ブラウザが条件付きコンパイルをサポートするかどうかをスクリプトに指示しているように見えます。サポートする場合は、次のコードを実行します。

/*@  ...

... @*/
于 2012-04-09T12:01:27.590 に答える
1

ここに良い説明があります

条件付きコンパイル。

この方法は、現在選択されている方法です。ディーン・エドワーズは、彼のブログ投稿Sniffでこのアプローチの宝石について説明しました。私の知る限り、これはIEを検出するための最もクリーンで信頼性の高い方法です。

var isMSIE = /*@cc_on!@*/false;

簡単ですね。ユーザーエージェント、20行の条件文および文字列検索はありません。

このコードはどのように機能しますか?Internet Explorerは、Microsoftが開発した独自の形式のJavaScript(ECMAScript)であるJScriptを使用します。JScriptには条件付きコンパイルと呼ばれる機能があり、特別にフォーマットされたコメント内にJScript固有のJavaScriptを追加できます。他のJavaScriptコンパイラは、コメントであると考えてこのコードを無視しますが、JScriptはそれを認識して処理します。

/ * @ cc_onがコメントを開始し、@*/がコメントを終了します。

IE以外のブラウザがvarisMSIE= / * @ cc_on!@ * / false;を認識すると、実際にはvar isMSIE=false;と見なされます。Internet ExplorerのJScriptは、コメントに含まれる感嘆符を追加します。つまり、IEはvar isMSIE =!false;を認識します。感嘆符はブール値を逆にするため、!falseはtrueと同等であることを忘れないでください。

ディーンが指摘したように、これを書くためのさらに簡単な方法があります(少し読みにくいですが):

var isMSIE/*@cc_on=1@*/;

宣言時に変数に値が割り当てられていない場合、デフォルトでは「false」(null)が返されます。したがって、IE以外のブラウザでは、この行がvarisMSIEと見なされます。InternetExplorerのJScriptはそれをvarisMSIE=1と見なします。(1を割り当てると、変数は'truthy'になります)。

isMSIEからMSを削除して、単純にisIEにすることで、もう少し短くしたいと思います。注:通常は準質問形式で、ブール値が何を表すかを示す名前をブール値に付けることをお勧めします。プレーンな古い変数IEを使用しても、変数がブール値であることがわかりません。また、ブール値がどの質問に答えているかもわかりません。varisIEはそうします。

var isIE/*@cc_on=1@*/;
if(isIE){
   //Do something. I suggest downloading Firefox.  ^_^
}
于 2013-05-09T07:26:09.057 に答える