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
を記述できる。他のブラウザでは単にコメントとして無視される。
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 のユーザをサポートしない。