[JavaScript] 1行でIE11を判定する方法

userAgent を利用して取得する方法

一般的には下記のように IE の判定を行ってきた。

// userAgent を取得、小文字にする
const ua = window.navigator.userAgent.toLowerCase();

// ユーザーエージェントから Internet Explorer であるかを判定
const isIE = ua.indexOf("msie") >= 0 || ua.indexOf("trident") >= 0;

※ IE11 からはmiseではなくtridentという文字になっている

1 行で取得する方法

userAgent を利用した取得の方法は一般的で IE 以外のブラウザの反映にも利用できるため、ブラウザの判定という一貫で合理性があった。
ただ近年のモダンブラウザの対応によって、ブラウザの判定理由が「IE のみを判定する」になり、userAgent を利用するのは合理的ではない場面も多くなったように思う。

document.documentModeを利用する。

document.documentMode;

従来、 documentMode プロパティは、現在のドキュメントをレンダリングするために IE が使用するモードを返却する(IE 専用のプロパティで、IE8 から利用可能)。
このプロパティは、IE 以外のブラウザでは実装されていないため、IE 以外ではundefinedが返却される。

// ユーザーエージェントから Internet Explorer であるかを判定
const isIE = !!document.documentMode;