IE10はbase
要素の相対URL指定に対応
開発が進んでいるIE10に関して、「マイナーな変更点リスト」を記した記事が。
- Internet Explorer 10 Consumer Preview Minor Changes List(
blogs.msdn.com
) - (日本語訳)Internet Explorer 10 Consumer Preview のマイナーな変更点リスト(
hebikuzure.wordpress.com
)
個人的に興味を持ったのは、base
要素に関する次の内容。
href
属性のあるbase
要素を記述すると、HTML内の相対URLの解決が行われますが、HTML4.01ではその指定方法にこんな制約があります。
- 指定できる値は絶対URL
-
head
要素の中で、外部リソースを参照する要素よりも前に記述しなければならない[1]
しかし、実際はFirefox, Google Chrome, Opera, SafariなどIE以外の主要ブラウザは相対URLの指定にも対応しており、仕様書の記述とは異なる解釈がなされます。いくつかのパターンを試してみました。
パターン | IE6 | IE7 | IE8〜9 | IE以外の4ブラウザ |
---|---|---|---|---|
base 要素に相対URLを記述 |
絶対URLとして解釈 | 絶対URLとして解釈 | 無視 | 対応 |
head 要素内に記述したbase 要素より前に記述した相対URL |
未解決 | 未解決 | 未解決 | 未解決 |
body 要素内に記述したbase 要素より前に記述した相対URL |
未解決 | 未解決 | 未解決 | 解決 |
body 要素内に記述したbase 要素より後に記述した相対URL |
解決 | 未解決 | 未解決 | 解決 |
base
要素に相対URLを記述した場合については補足が必要でしょう。たとえば、http://example.com/base.html でアクセスできるリソースにおいて
<base href="foo/" />
<link rel="stylesheet" href="bar.css" />
と記述した場合、bar.cssは次のように解釈されます。
- IE6〜7は http://foo/bar.css
- IE8〜9は http://example.com/bar.css
- IE以外は http://example.com/foo/bar.css
このようにブラウザによって解釈がバラバラなため、基本的に相対URLを指定するべきではありません。また、base
要素をhead
要素の外に記述した時の解釈も統一されていませんが、そもそもそれはvalidでない状態なので、いずれにしても止めるべきでしょう。
ほかにもform
要素のaction
属性を空にした場合はBase URL処理が行われないという事象もあり、こちらは仕様書の記述を実装に合わせて変更しているように見受けられます。
古くからある要素にもかかわらず、IE10においてブラウザごとの実装差異がなくなり、さらに仕様が実装に歩み寄ったことで仕様に準拠したブラウザがやっと出そろったことになる、といったところでしょうか。
脚注
-
1.
HTML5では、
html
要素にmanifest
属性でURLを指定できるようになりましたが、これはbase
要素による解決を受けません。仕様書でも記述位置の制約についてexcept the html element
と書かれています。 ↩ 戻る