13

特定の機能を使用できるかどうか、または回避策を使用する必要があるかどうかを判断するために、特定の機能の機能検出を既に行っています。しかし、残念なことに、IE にはその機能にいくつかのバグがあり、それが存在していても役に立たないことがわかりました。したがって、機能の検出に合格しても、ブラウザーが IE であることを検出する必要があるため、IE の場合はその機能を使用しません。

実際のバグのある動作で機能検出を実行できるかどうかを確認しようとしましたが (これは、IE が将来動作を修正する場合に適応するため、最適です)、それを行う方法はないようです (件名別の質問の)。つまり、バグのある機能を回避できるように、それが IE ブラウザーであることを最終的に特定しようとすることになります。 useragent 文字列は簡単にスプーフィングされ、簡単に間違ってしまう可能性があることは誰もが知っているので、私は使いたくありません。

そこで、IE ブラウザかどうかの機能検出を行いたいと思います。

これまでのアプローチは次のとおりです。

var isIE = (document.body.attachEvent && window.ActiveXObject);

これは、attachEvent()メソッドが存在するかどうか、およびActiveXObjectサポートが存在するかどうかを確認します。attachEventOperaはattachEvent.

これは IE を検出する信頼できる方法ですか? より良い方法はありますか?

I really should do browser detection, but should use feature detection instead. で応答しないでください。私はすでに機能検出を行っていますが、その機能を「サポート」していて機能検出に合格するブラウザーは非常にバグが多く、そのブラウザーで機能を使用できないことが判明したため、問題が発生しました。そこで、バグのあるブラウザを検出する必要があります。

これが使用されている特定の状況について詳しく知りたい場合は、この他の質問に記載されています。

4

3 に答える 3

10

ここで説明されている条件付きコメントの条件付きコンパイル:

http://www.quirksmode.org/css/condcom.html

または、ここにある関連するいとこ:

http://www.javascriptkit.com/javatutors/conditionalcompile.shtml

どちらも Internet Explorer 専用であるため、IE をスニッフィングできます。

<script type="text/javascript">

/*@cc_on
document.write("JScript version: " + @_jscript_version + ".<br>");
   /*@if (@_jscript_version >= 5)
      document.write("JScript Version 5.0 or better.<br \/>");
      document.write("This text is only seen by Internet Explorer browsers that support JScript 5+<br>");
   @else @*/
      document.write("This text is seen by all other browsers (ie: Firefox, IE 4.x etc)<br>");
   /*@end
@*/

</script>
于 2012-08-29T21:00:57.643 に答える
6

リンクされた投稿では、条件付きコメントの提案がありました。これにより、IE のバージョンも検出できます。

次のようなものを頭に追加します。

<!--[if lt IE 9]>
  <script type="text/javascript">
    var lt9=true;
  </script>
<![endif]-->

これは IE 固有のもので、他のブラウザではコメントとして無視されます。

簡単な検出には、次のようなものを使用します。

<!--[if gte IE 6]>
  <script type="text/javascript">
    // this is IE greater than or equal to 6
    var isIE=true;
  </script>
<![endif]-->
于 2012-08-29T20:59:53.710 に答える
0

条件付きコンパイルではなく条件付きコメントを使用すると、IE のバージョンを検出できるという利点があります (条件付きコンパイルから得られる最高の JScript バージョンとは対照的です)。次のように使用して、スクリプトからこれを行うことができinnerHTMLます。次の例は、IE 8 以下を検出する方法を示しています。

var div = document.createElement("div");
div.innerHTML = "<!--[if lte IE 8]><i></i><![endif]-->";
var isIe8orLower = (div.getElementsByTagName("i").length == 1);

alert("Is IE 8 or lower: " + isIe8orLower);

IE 10 以降では、条件付きコメントがまったくサポートされていないことに注意してください。ただし、条件付きコンパイルは引き続き機能し、次善のオプションであるため、使用することをお勧めしますが、前述のように、IE の実際のバージョンを特定することはできません。

于 2012-10-03T16:59:38.210 に答える