Internet Explorer 11の検出


124

IE 11には他のすべてのIEとは異なるユーザーエージェント文字列があることを知っています

 Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko

この質問に回答を指定してIE 11を検出しようとしました」

jqueryはIE 11を検出できません

それ !!navigator.userAgent.match(/Trident\/7\./)

しかし、エラーが発生しています Object not found and needs to be re-evaluated.

次に、IE11で開発者コンソールを開き、いくつかの事前定義されたJavaScriptオブジェクトにアクセスしようとしましたが、それでも同じエラーが発生します。

私が試してみました

navigator.userAgent

window.navigator

console.log('test');

誰かそれについて何か考えがありますか?


@ボブキン私は私の問題の上で述べました。エラーが発生Object not found and needs to be re-evaluated.
ミクダッドアリ


回答:


188

2016年11月18日を編集

このコードも機能します(ActiveXを使用せずに別のソリューションを好む人向け

var isIE11 = !!window.MSInputMethodContext && !!document.documentMode;
  // true on IE11
  // false on Edge and other IEs/browsers.

元の回答

Ie11をチェックするために、これを使用できます:(テスト済み)

(またはこれを実行する

!(window.ActiveXObject) && "ActiveXObject" in window

IEのすべてのVMSがあります。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

ここに画像の説明を入力してください

ここに画像の説明を入力してください

注意:これはIE11では機能しません:

ここを見るとわかるように、trueを返します。

ここに画像の説明を入力してください

だから私たちは何ができますか:

どうやら、彼らはマシンのビットスペースを追加しました:

ie11:

"Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; rv:11.0) like Gecko"

ie12:

"Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; rv:11.0) like Gecko"

だから私たちはできる:

/x64|x32/ig.test(window.navigator.userAgent)

これはie11に対してのみtrueを返します。


1
@Jan。はい。IE11のみがこの条件全体でtrueを返します。<11がfalseを返すことを示しました。
Royi Namir 14

1
@IanSteffyこれは、操作の結果(!)を表示するだけです。HTMLファイルを開いてスクリプトタグを追加し、そのスクリプト内でコマンドを実行できます。ここでこれを実行します。
Royi Namir

2
x64ChromeとEdgeの両方を返します
Gene R

3
待って、IE12はありますか?IE11は最後のものだと思ったので、間もなくこの愚かなブラウザーについて心配する必要はなくなります。☹
マイケルScheper

1
Windows 7 Enterprise上のIE 11.0.9600.19431では機能しません。ありませんwindow.MSInputMethodContext
ハインリッヒウルブリヒト

105

MSIE(バージョン6から11)をすばやく検出するには:

if(navigator.userAgent.indexOf('MSIE')!==-1
|| navigator.appVersion.indexOf('Trident/') > -1){
   /* Microsoft Internet Explorer detected in. */
}

2
二つ目はすべきではないindexOf()こと> -1
改訂

ええ、私はなぜそれの> 0を知らない> -1が、「トライデント/」ショーアップもはるか遠くのappversion列anyways-にしないでください
chrismarx

22

次の関数を使用して、IEのバージョン9、10、11を検出します。

function ieVersion() {
    var ua = window.navigator.userAgent;
    if (ua.indexOf("Trident/7.0") > -1)
        return 11;
    else if (ua.indexOf("Trident/6.0") > -1)
        return 10;
    else if (ua.indexOf("Trident/5.0") > -1)
        return 9;
    else
        return 0;  // not IE9, 10 or 11
}  

21

上記の回答はすべて、ウィンドウやナビゲーターがないと言っているという事実を無視しています:-)

次に、IE11で開発者コンソールを開きました

それが言うところ

オブジェクトが見つからないため、再評価する必要があります。

ナビゲーター、ウィンドウ、コンソール。これらは存在せず、再評価する必要があります。私はエミュレーションでそれを持っています。コンソールを数回閉じて開くだけです。


5
実際に質問を読んで、再評価で問題に答えてくれてありがとう。
marknadal 2015年

8
私も働いた。IEが死ぬと、世界中でパーティーが開かれるのはこのためです。
ボルトレボ2016

コンソールを閉じて開くことは私にとってはうまくいきました。FirefoxやChromeと比較した場合の奇妙な動作(ただし、IEなので、その数値です)
Ectropy

7

IE 11のみを検出するかなり安全で簡潔な方法は

if(window.msCrypto) { /* I'm IE11 for sure */ }

またはこのようなもの
var IE11= !!window.msCrypto;


msCryptowindow.cryptoオブジェクトの接頭辞付きバージョンであり、IE 11でのみ実装され
ます。https://developer.mozilla.org/en-US/docs/Web/API/Window/crypto


唯一の実用的なソリューション(これは、最も短く、最もクリーンで最もエレガントなソリューションです)Royi Namir /x64|x32/ig.test(window.navigator.userAgent)はFirefoxにも適用されます!
サンドールズボリ

4

そして、私がこれをどのように実装したか

<script type="text/javascript">
  !(window.ActiveXObject) && "ActiveXObject"
  function isIE11(){
    return !!navigator.userAgent.match(/Trident.*rv[ :]*11\./);
  }
</script>

1
機能にタイプミスがあると思います。まず、使用されていない状態チェックを行います。第二に、おそらくあなたは意味し&& "ActiveXObject" in windowます。第三に、二重否定のトリックは何!!ですか?
dma_k 2016年

1
!! ほとんどの場合、「ブール型への強制」を意味します。
Andrew Grey

4

さて、これを試してみてください、シンプルで、IE11およびIEバージョン11以下の場合

browserIsIE = navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1 || navigator.userAgent.toUpperCase().indexOf("MSIE") != -1;

navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1IE 11バージョン navigator.userAgent.toUpperCase().indexOf("MSIE") != -1用IEバージョン11以下用

browserIsIE = navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1 || navigator.userAgent.toUpperCase().indexOf("MSIE") != -1;

console.log('Is IE Browser : '+ browserIsIE)


2

このリンクは役に立ちました。IE11までのIEのすべてのバージョンを検出するJavaScriptコードが含まれています。IE11エミュレーターでスクリプトをテストしました。IE11エミュレーターを見つけるには、Webブラウザーを右クリックして、「要素の検査」をクリックします。ページの左下で、ナビゲーションバーを下にスクロールして、デスクトップアイコンをクリックします。[ユーザーエージェント文字列]ドロップダウンボックスには、IE6-11をエミュレートするオプションが含まれています。

できます。この回答を書く数分前に使用しました。スナップショットを投稿できません-評判が不十分です。


これはコードです-リンクをたどってもう一度表示してください:

// Get IE or Edge browser version
var version = detectIE();

if (version === false) {
  document.getElementById('result').innerHTML = '<s>IE/Edge</s>';
} else if (version >= 12) {
  document.getElementById('result').innerHTML = 'Edge ' + version;
} else {
  document.getElementById('result').innerHTML = 'IE ' + version;
}

// add details to debug result
document.getElementById('details').innerHTML = window.navigator.userAgent;

/**
 * detect IE
 * returns version of IE or false, if browser is not Internet Explorer
 */
function detectIE() {
  var ua = window.navigator.userAgent;

  // Test values; Uncomment to check result …

  // IE 10
  // ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)';

  // IE 11
  // ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko';

  // Edge 12 (Spartan)
  // ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0';

  // Edge 13
  // ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586';

  var msie = ua.indexOf('MSIE ');
  if (msie > 0) {
    // IE 10 or older => return version number
    return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
  }

  var trident = ua.indexOf('Trident/');
  if (trident > 0) {
    // IE 11 => return version number
    var rv = ua.indexOf('rv:');
    return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
  }

  var edge = ua.indexOf('Edge/');
  if (edge > 0) {
    // Edge (IE 12+) => return version number
    return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
  }

  // other browser
  return false;
}
@import url(https://fonts.googleapis.com/css?family=Fira+Mono|Fira+Sans:300);
body {
  color: black;
  background-color: white;
  font-family: "Fira Sans", sans-serif;
  font-weight: 300;
  margin: 0;
  padding: 3rem;
}

h1 {
  color: darkgrey;
  text-align: center;
  font-weight: 300;
  font-size: 1.5rem;
  line-height: 2rem;
}

h2 {
  text-align: center;
  font-weight: 300;
  font-size: 4rem;
}

p {
  color: darkgrey;
  text-align: center;
  font-family: "Fira Mono", monospace;
  font-size: 1rem;
  line-height: 1.5rem;
}
<h1>Detect IE/Edge version with JavaScript.<br> Updated to recognize Internet Explorer 12+ aka Edge.</h1>
<h2 id="result">detecting…</h2>
<p id="details">n/a</p>


1

このRegExpの使用は、IE 10およびIE 11で機能するようです。

function isIE(){
    return /Trident\/|MSIE/.test(window.navigator.userAgent);
}

これをテストするIE 10より古いIEはありません。


0

ナビゲーターを使用:-

navigatorクライアント・マシンのブラウザに関するすべての情報を含むオブジェクトです。

navigator.appName クライアントマシンのブラウザの名前を返します。

navigator.appName === 'Microsoft Internet Explorer' ||  !!(navigator.userAgent.match(/Trident/) || navigator.userAgent.match(/rv:11/)) || (typeof $.browser !== "undefined" && $.browser.msie === 1) ? alert("Please dont use IE.") : alert("This is not IE")
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


1
appNameはIE 11のNetscapeです。開発者をだますためにできる限りのことをしました。
kagronick

0

IE11は異なる環境で複数のユーザーエージェント文字列を提供していることがわかりました。

MSIEやその他のアプローチに依存する代わりに、Tridentバージョンに依存する方が良い

const isIE11 = userAgent => userAgent.match(/Trident\/([\d.]+)/) ? +userAgent.match(/Trident\/([\d.]+)/)[1] >= 7;

お役に立てれば :)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.