Internet Explorer のためのバッドノウハウ

Web 開発者 / デザイナーなら、無視したくてもできない、世界トップシェアの Web ブラウザ、Internet Explorer のためのバッドノウハウ集。まったく網羅的でも代表的でもありません。

画像送信時の Content-Type

普通、フォームの で送信されるデータの Content-Type は、JPEG なら image/jpeg、PNG なら image/png になるが、IEでは image/pjpeg、image/x-png で送信されるので、これらの Content-Type に対応しなければならない。8.0で確認。

HTTP エラーページの表示

404 などのHTTPエラーをサーバが返した場合、レスポンスボディを表示するのが普通だが、IEではデフォルトでは、レスポンスボディが512バイト以下なら、ブラウザが用意したエラーページを表示する。未確認。

ブックマーク (レット) の文字数制限

ブックマーク / ブックマークレットの URL に文字数制限がある。 Rules for Bookmarklets より引用。

ブラウザ 最大文字数
Netscape > 2000
Firefox > 2000
Opera > 2000
IE 4 2084
IE 5 2084
IE 6 508
IE 6 SP 2 488
IE 7 beta 2 2084

DOCTYPE 宣言による挙動の変化

これは IE に限らない。下記ページが詳しく、網羅的。

hxxk.jp - DOCTYPE スイッチについてのまとめと一覧表 (HTML 5 や IE 8 Beta 2 のモードスイッチなどの情報も含んだ 2008 年版 )

条件分岐コメント

<!--[if IE]>(任意のHTML)<![end if]--> などの記法で、IEのみ、IEの特定のバージョンのみに適用する HTML を記述できる。他のブラウザでは単にコメントとして無視される。

About Conditional Comments

Content-Type ヘッダの無視

デフォルトの設定では、レスポンスに含まれる Content-Type ヘッダを無視し、データの内容から形式を推測して、表示などを行う。これにより、たとえば text/plain のレスポンスが HTML と解釈され、XSS が起こる可能性がある。

サーバ側ではヘッダに X-Content-Type-Options: nosniff を追加することで、Content-Type の推測を無効にできる。ただし、このヘッダに対応しているのは 8 (以降?) のみ。

display: inline-block がインライン要素にしか適用されない (7 以前)

7 以前では、display: inline-block がインライン要素にしか適用されない。IE では置換要素 (input など) は、display: inline; hasLayout: true; で zoom: 1; とすると hasLayout が true になるため、下記の CSS で display: inline-block; と同じような効果が得られる。

<!--[if lt IE 8]>
<style>
.foo {
  display: inline;
  zoom: 1;
}
</style>
<![end if]-->

IE 6, IE 7 の inline-block 考察 | ヨモツネット

1 つの IP アドレスで複数の SSL 証明書を使う

TLSv1.1 からは通信開始時にホスト名を送信するので、サーバ側でホスト名に応じた SSL 証明書を返すことができる。

Windows XP 上の IE は TLSv1.1 に対応していないため、いずれかのホストで誤った証明書を取得してしまい、検証エラーになる。

Windows Vista 以降は問題なし。

解決策は特にないので、SSL 証明書ごとに異なる IP アドレスを使用するか、Windows XP + IE のユーザをサポートしない。

Server Name Indication - Wikipedia