先週、MicrosoftはWindows 8.1を備えたInternet Explorer 11の最初のプレビューを正式に発表しました。このようにして、この物議を醸すリークされたバージョンのWebブラウザーについてのすべての噂に耐える時が来ました。 WebGLのサポート、Prefetch(翻訳者の注:ファイルのアップロードなど、翻訳が正しいかどうかはわかりません)、プレレンダー(プレップレンダー)、Flexbox、変異オブザーバー、その他のWeb標準など、Internet Explorer 11のいくつかの重要な詳細を知っています。おそらくIE11でより興味深いのは、IEであるかどうかです。
Microsoftは、長い間インターネットExplorerブラウザからいくつかの機能を削除しました。ユーザーエージェント文字列も変更されました。 Microsoftは独自の方法を放棄したため、既存のIE検出コードブランチは、JavaScriptであろうとサーバー上のInternet Explorer 11ブラウザーでFalseを返します。
ユーザーエージェントへの変更
以前のバージョンと比較して、Internet Explorer 11のユーザーエージェント文字列は短く、興味深い変更がいくつかあります。
コードコピーは次のとおりです。
Mozilla/5.0(Windows NT 6.3; Trident/7.0; RV 11.0)Geckoのような
Windows7のインターネットエクスプローラー10のユーザーエージェント文字列用
コードコピーは次のとおりです。
Mozilla/5.0(互換性、MSIE 10.0; Windows NT 6.1; Wow64; Trident/6.0)
最も明らかな違いは、インターネットエクスプローラーブラウザのユーザーエージェント文字列の「MSIE」タグが削除されたことです。また、ユーザーエージェントの尾に「gecko」を追加することも説得力があります。これは、インターネットエクスプローラーがインターネットエクスプローラー自体よりもGeckoブラウザーとして認識されることを示しています。 Safariは「Geckoのように」を追加した最初のブラウザであり、ユーザーエージェント文字列の「Gecko」文字を嗅ぎ、ブラウザを渡すことができます。
「MSIE」を探すスニッフィングコードは、新しいユーザーエージェント文字列の下では機能しません。 「トライデント」文字を検索して、IEブラウザであると判断することができます(「トライデント」ロゴはインターネットエクスプローラーで導入されました)。 Internet Explorerの実際のバージョンは「RV」によって識別されます。
さらに、ナビゲーターオブジェクトの情報も変更されており、使用されているブラウザをさらに隠します。
navigator.appnameは「netscape」に設定されています
navigator.productは「gecko」に設定されています
これは、開発者をこっそりトリックしようとする試みのように思えるかもしれませんが、実際にはHTML5が指定されています。 navigator.productプロパティは「gecko」でなければならず、navigator.appnameも「netscape」以上である必要があります。しかし、Internet Explorer 11の欠如は、この奇妙な提案に従います。
ナビゲーター情報の変更によって引き起こされる副作用、使用中のJavaScriptロジックに基づくブラウザ検出は利用できず、Internet Explorer 11がGeckoベースのブラウザーとして認識されます。
document.allと彼の友人
IE4以来、document.allはIEブラウザですべてを実行しました。以前に実装されたdocument.getElementByID()は、document.allがDOM要素リファレンスを取得するIEメソッドに似ています。 document.allは、IE5からIE10へのDOMのサポートを維持しています。ただし、11では、この時代から残された製品は虚偽を返すように設定されています。つまり、コードが実際にdocument.allを使用して正しく動作する場合でも、すべてがIE11でbranchを支配することを意味します。
もう1つのレガシーは、Detachevent()メソッドと同様に、イベント関数を追加するActitsEvent()です。この方法はIE11から削除されました。これらの方法は、次のような論理的な判断を回避するために削除されます。
コードコピーは次のとおりです。
関数AddEvent(要素、タイプ、ハンドラー){
if(element.attachevent){
element.attachevent( "on" + type、handler);
} else if(element.addeventlistener){
Element.AddeventListener(タイプ、ハンドラー、False);
}
}
もちろん、テストに最適なバージョンは常に安定しており、標準を満たすことをお勧めします。あるレベルでは、AttachEventメソッドを削除しても不快感はありません。ただし、インターネットには、インターネット用の機能検出ロジックコードがいっぱいです。 AttachEventメソッドの削除により、上記の方法で記述されたコードがIE固有のメソッドではなく標準バージョンを使用することが保証されます。
他のいくつかの削除された機能:
window.execscript() - ieバージョンのeval()method
window.doscroll()-IEウィンドウスクロール方法
script.OnreadyStateChange -IEの読み込みスクリプトの状態の変更
Script.ReadyState— IEでのスクリプトロードの状態
document.selection- IEで現在選択されているテキスト
document.createstyleSheet-- IEのスタイルシートドキュメントを作成します
style.stylesheet-スタイルシートを参照するIEブラウザのスタイルオブジェクト
これらのIEブラウザメソッドはすべて、標準機能に置き換えられます。これらの機能と方法を削除した後、標準の機能的特徴の検出に基づくクロスブラウザーコードは、変更せずに正常に機能する可能性があります。
結論は
IE11は、おそらく長い間IEブラウザである可能性があります。マイクロソフトはついに過去に犯された間違いを排除する準備をしており、現在の標準に基づいてブラウザから始める準備ができています。古い機能を削除し、IEブラウザとして認識されないユーザーエージェント文字列を変更することは、すべてのWebサイトが機能し続けることを保証するユニークなプラクティスです。 Webアプリケーションがブラウザスニッフィングの代わりに機能検出を使用する場合、コードはIE11で実行する必要があります。 IE11には標準を優れたサポートを提供しているため、ユーザーエージェントスニッフィングを使用するアプリケーションでは、ユーザーはまだ優れた機能を備えたWebサイトを表示できます。
IEブランチコードのない未来が来ています。一緒に楽しみましょう。
(2013年7月2日に更新)、ドキュメント。改訂版で記載されているすべては実際には削除されていませんが、Falsesyに変更されました
私は長い間記事を翻訳していません。今回は、ニコラスC.ザカスのブログを翻訳しました。元のテキストはこちら:http://www.nczonline.net/blog/2013/07/02/internet-explorer-11-dont-call-me-ie/