IE9 Beta のマイナーな変更点リスト
Eric Lawrence さんから、IE9 Beta Minor Changes List - EricLaw's IEInternals - Site Home - MSDN Blogs の翻訳の許可をもらったので訳してみました。間違い等あれば教えてください。
ブラウザの各リリースにおいて我々が行う様々な機能の追加変更のほとんどは、IEBlog の投稿において読むことができます。しかしながら、我々は同時に、見落とされがちな、あるいはあまり広くは知られていないような多数の小さな改善も行っています。この記事では、それらの小さな改善のうち私が興味深いと考えるものについてピックアップしてみます。影響を与える改善点やこれまでにこのブログ上で議論された機能などは、BetterInIE9 を検索することにより見つかります。
もちろん、私が把握していない何千もの変更があるので、これを包括的なリストと誤解しないでください。また、ここ数ヶ月間、IEBlog上で議論している大きな機能改善については故意に飛ばしている点に注意してください。
ネットワーク
- レスポンスボディの中身のバイト数が Content-Length レスポンスヘッダの指定より少ない場合は、WinINET/IE はレスポンスを拒絶します。
- HTTPチャンク形式エンコーディングにて、最後のチャンクに含まれるバイト数が最終の chunk-size の指定より少ない場合、WinINET/IEはレスポンスを拒絶します。しばらくの間我々は、最終のサイズ0のチャンクの指示が含まれていないHTTPレスポンスも同様に拒絶しようと試みましたが、実在の多くのサイトがこれを省略(RFC2616に違反しています)していることがわかったため、この変更は維持されませんでした。
- サーバがファイルタイプに応じた適切な Content-Type ヘッダを指定できていないときに、IE9が無条件にZIPベースのフォーマット(Office 2007 ドキュメントなど)のファイルの拡張子を変更することはなくなりました。
- レスポンスに2つ以上の Cache-Control ヘッダが含まれるときに、IE9は他の全ての Cache-Control ヘッダを無視しなくなりました。(訳注:意味不明,下記コメント参照)
- IE9は Age ヘッダがない場合に Date ヘッダを使って RFC2616 に従ったメカニズムで Age を計算するよようになりました。
- IE9はレスポンスのDateが現在の時刻より進んでいても、キャッシュの性能にペナルティを科さなくなりました。
- IE9は、レスポンスで (Age > max-Age) のときには、Max-Age を無視して Expires ヘッダにフォールバックしていたのに代わり、期限切れとして処理するようになりました。
- 様々な理由から、IEはローカルキャッシュ内に有効な縮退画像を持っていないかもしれません。これまでのバージョンのIEでは、画像を右クリックして「名前を付けて画像を保存」がビットマップフォーマットでの唯一の画像の提供方法でした(IEが画像のコピーをメモリ内にビットマップフォーマットで保持していたからです)。IE9では、Trident は画像エンコーダを内蔵しているので、ローカルキャッシュ内にファイルが見つからなくても、「名前を付けて画像を保存」のダイアログはPNGフォーマットを提供できます。PNGフォーマットはSVGイメージにも利用可能です。(訳注:下記コメント参照)
- コンテキストメニューの「対象をファイルに保存」はHTTPリファラヘッダを正しく送るようになりました。「対象をファイルに保存」にてUser-AgentヘッダをURLの互換表示の設定に合わせて正しく送れていないバグはIE9 betaでもまだ修正されていません。
- IE7でProxy自動構成スクリプトにおけるIPv6がサポートされましたが、IPv6リテラルホスト名に対して、falseを返さなければならないときでもIsPlainHostname関数が常にtrueを返すバグがありました。これは、Proxy自動構成スクリプトの作者が、複数のコロン文字がホスト名中にあるか確認することで回避できました。IE9では IsPlainHostname 関数は修正されています。
パフォーマンス
- IE9以前では、HREFでのスタイルシートに対してスキーム相対のプロトコルを用いた場合、スタイルシートの複数並列したダウンロードを引き起こすことがありました。これは修正されました。
- IE9以前では、<script src="">のようなsrc属性が空のURIのimageタグはダウンロードのトリガーとなることがありました。HTML5仕様の変化に伴い、これはダウンロードを引き起こさなくなりました。
- 例えイベントが再発生しても、再スタートの回避とパフォーマンスの改善を行うため、先読みプリパーサに改善を行いました。
Webアプリケーション
- IE9スタンダードモードでは、旧来の難読化エンジンである JScript.Encode と JScript.Decode は使用できません。
- IE9スタンダードモードでは、XMLHttpRequestオブジェクトは使用されるかもしれないメソッドのリストに厳しいリストは使用しません。禁止されるメソッドは、TRACEとTRACKだけです。
- data URIの長さの制限は32kバイトから4Gバイトに引き上げられました。長いdata URIはいくつかの場面、とりわけ Canvas 要素への toDataURL() メソッドにて重要です。しかし、IE9にはCSSのfont-faceに4kバイトを超えるdata URIが利用できないという既知のバグがあります。
- data URIは現在、SCRIPTのsrc属性として利用できます。ACID3のテストには次のような例が含まれています。:<script type="text/javascript" src="data:text/javascript,d1%20%3D%20'one'%3B"></script> とはいえ、このように書くべき理由はありません。むしろ、SCRIPTの内容を直接ページ内に記述してください。
- IE9以前では、IDM_AUTOURLDETECT_MODE を JavaScript から指定することはできませんでした。これは、ContentEditable エリア内の自動ハイパーリンクを無効にできないことを意味していました。IE9では新しいコマンド AutoUrlDetect がサポートされ、次のようなスクリプトで自動ハイパーリンクを無効にできます。: document.execCommand("AutoUrlDetect", false, false)
- ユーザがポップアップブロッカーの通知バーで「ポップアップの許可」を選んだとき、IEはそのページのスクリプトが正しく動作しポップアップが発動するよう、スクリプトを許可してページの再読み込みを試みます。しかし、ページのリフレッシュが止まる可能性があります(たとえば、「このページから移動しますか? いくつかのデータが消失するかも知れません。」等の OnBeforeUnload ダイアログなど)。以前は、「いいえ」を選ぶとページはリフレッシュされず、それに続くポップアップはブロックされたままでした。現在これは修正され、ページのリフレッシュを拒否したとしても、それに続くポップアップは許可されます。
- OnBeforeUnload ダイアログはどういうテキストがWebページから提供されているか、どういう選択肢があるのかをより明瞭にするため変更されました。
セキュリティ
- IE9では構造化例外処理の上書き保護(SEHOP)がデフォルトで有効になりました。
- IE9は Visual Studio 2010 コンパイラでコンパイルされ、EnhancedGS スタック保護機能による恩恵を受けます。
- デフォルトでは、IE9はセキュアなページにてセキュアでない画像を受け付けますが、鍵アイコンは取り消されます。セキュアでないスタイルシート、スクリプトおよび他のコンテンツはデフォルトではユーザにプロンプトを表示するのではなくブロックされます。「詳細設定」にてセキュアでない画像をブロックするよう設定することもできます。
- IE9ブラウザモードでは、IEは text/plain なコンテンツをスニフにより text/html として扱うことはありません。IE8 ではMIMEスニフから保護するためにはサイトは X-Content-Type-Option: nosniff ヘッダを送る必要がありました。もちろん、信頼できないユーザによりアップロードされたコンテンツを配信するには、このヘッダを送出するのが現状でもベストプラクティスです。
- ドキュメントモードと関係なく、IE9ではスタイルシートのHTTPレスポンスヘッダにて Content-Type: text/css が指定されない限りはクロスドメインでのスタイルシートは適用されません。Firefox 4 とは異なり、Content-Type ヘッダがない場合はスタイルシートは適用されません。
- IE9スタンダードドキュメントモードでは、IE9はスタイルシートのHTTPレスポンスヘッダで Content-Type: text/css が指定されない限りはスタイルシートを適用しません。
- モードにかかわらず、スタイルシートのHTTPヘッダに X-Content-Type-Options: nosniff があり、Content-Type: text/css がない場合はIE9はスタイルシートを適用しません。
- HTTPヘッダにて X-Content-Type-Options: nosniff が指定され、Content-Type が以下のいずれかでない場合には、IE9はスクリプトを実行しません。["text/javascript", "application/javascript", "text/ecmascript", "application/ecmascript", "text/x-javascript", "application/x-javascript", "text/jscript", "text/vbscript", "text/vbs"]
- クロスドメインでのフレームをまたいでの charset の継承は、完全にブロックされました。
- IE9のSmartScreenフィルタの警告ページは現在、どのフレームが警告を引き起こしたかの情報を含んでいます。IE8でも同様のコンテンツをブロックしますが、訪問しようとしたサイトが、どの悪意ある広告の被害者のものか、より簡単に把握できるようIE9では改善されています。
ActiveX Phoenix Bits
Security Research and Defense blog で説明されるように、Phoenix bit は、以前に killbit により脆弱性の攻略コードをブロックされた ActiveX コントロールの新しいバージョンのリリースを、ActiveX コントロールの開発者に許可するものです。Phoenix Bit は、Webコンテンツにおいて、元々の killbitされたCLSIDを参照するWebコンテンツをIEがロードする際の、代替のCLSIDを(レジストリを通じて)開発者が指定するという、シンプルなメカニズムです。
しかしながら、IE9以前は ActiveX コントロールが JavaScript によって次のように呼ばれた場合、
var obj = new ActiveXObject("clsid");
この例では、代替CLSIDは無視され、オブジェクトの生成は当然ながら killbit により失敗します。現在、IE9ではこの欠点は修正され、上の例の JavaScript は正しく代替CLSIDで指定されたオブジェクトのインスタンスを生成します。
Internet Explorer User Interface
- インラインでのオートコンプリート機能がIEのアドレスバーで復活しました。これは私の好きなナビゲーションの機能で、デフォルトで有効になっています。
- 戻る/進むボタンの隣の下矢印をクリックして表示される「移動の履歴」は、デフォルトで表示されなくなりました。「移動の履歴」にアクセスするには、戻る/進むボタン上で右クリックまたは左クリックを押し続けてください。
- ユーザインターフェイスガイドラインに沿うために、IE9以前はブラウザのメニューが「Title Cased text」という(大文字小文字の)表記だったものが、「Sentence cased text」という表記に変わりました。
- CTRL+Sのキーの組み合わせが、ほとんどの場合利用できない「上書き保存」ではなく「名前を付けて保存」になりました。Webページをより簡単にディスクに保存できるようになりました。
- IEは現在、他のブラウザと同様にCTRL+Lでアドレスバーにフォーカスが移動するようになりました。従来のALT+Dホットキーも依然として有効ですし、CTRL+Oによる従来の「開く」ダイアログも利用できます。
- アドレスバーに単一語句を入力してEnterを押すと、その語句の検索となります。「アドオンの管理」から検索をオフにすることもできます。また、例えば http://data というイントラネットにアクセスするには data/ または //data または : data と入力します。検索であることをより明確にするには、? data のように先頭にハテナを入力します。
今のところこのような感じです。みなさんがIE9 Betaを楽しんでくれることを期待しています。ダウンロードはこちらから。
-Eric