<base>
タグを使用するかどうかを決定する前に、タグの機能、使用方法、意味を理解し、最終的に利点/欠点を上回る必要があります。
<base>
タグは、主にあなたが現在のコンテキストを心配する必要はありませんとしての言語をテンプレート化における相対リンクの作成容易になり、すべてのリンクを。
あなたは例えばすることができます
<base href="${host}/${context}/${language}/">
...
<link rel="stylesheet" href="css/style.css" />
<script src="js/script.js"></script>
...
<a href="home">home</a>
<a href="faq">faq</a>
<a href="contact">contact</a>
...
<img src="img/logo.png" />
の代わりに
<link rel="stylesheet" href="/${context}/${language}/css/style.css" />
<script src="/${context}/${language}/js/script.js"></script>
...
<a href="/${context}/${language}/home">home</a>
<a href="/${context}/${language}/faq">faq</a>
<a href="/${context}/${language}/contact">contact</a>
...
<img src="/${context}/${language}/img/logo.png" />
<base href>
値はスラッシュで終わることに注意してください。そうでない場合、最後のパスを基準にして解釈されます。
ブラウザの互換性に関しては、これはIEでのみ問題を引き起こします。<base>
タグは、HTMLでのように指定されていない終了タグを持つ</base>
、それだけで使用することに合法ですので、<base>
終了タグなし。しかし、IE6はそうでないと、コンテンツ全体思った後<base>
、タグのように置かれ、このような場合であり、子供の<base>
HTML DOMツリー内の要素。これにより、一見すると、JavaScript / jQuery / CSSで説明できない問題が発生する可能性があります。つまり、要素がのような特定のセレクターで完全に到達不能にhtml>body
なり、HTML DOMインスペクターでその間にbase
(およびhead
)があるはずです。
一般的なIE6修正は、IE条件付きコメントを使用して終了タグを含めることです。
<base href="http://example.com/en/"><!--[if lte IE 6]></base><![endif]-->
W3バリデーターを気にしない場合、またはHTML5をすでに使用している場合は、それを自動的に閉じることができます。すべてのWebブラウザーがそれをサポートしています。
<base href="http://example.com/en/" />
<base>
タグを閉じると、WinXP SP3上のIE6 の狂気も即座に修正<script>
さsrc
れ、無限ループ内で相対URIを使用してリソースをリクエストします。
あなたが相対URIを使用するときに別の潜在的なIEの問題が明らかになり<base>
、タグのような、<base href="https://stackoverflow.com//example.com/somefolder/">
または<base href="https://stackoverflow.com/somefolder/">
。これはIE6 / 7/8では失敗します。ただし、これはブラウザの責任ではありません。<base>
つまり、タグで相対URIを使用すること自体が間違っています。HTML4仕様は、それがこのように始まる、絶対URIでなければならないと述べたhttp://
、またはhttps://
スキーム。これはHTML5仕様で削除されました。したがって、HTML5を使用し、HTML5互換のブラウザのみを対象とする場合は、<base>
タグで相対URIを使用することで問題ないはずです。
のような名前付き/ハッシュフラグメントアンカー、のような<a href="#anchor">
クエリ文字列アンカー、<a href="?foo=bar">
およびのようなパスフラグメントアンカーの使用については<a href=";foo=bar">
、<base>
基本的に、タグを使用して、これらの種類のアンカーを含む、それに関連するすべての相対リンクを宣言します。現在のリクエストURIに関連する相対リンクはもうありません(タグなしでは発生します)。これはまず第一に混乱を招くかもしれません。これらのアンカーを正しく構築するには、基本的にURIを含める必要があります。<base>
<a href="${uri}#anchor">hash fragment</a>
<a href="${uri}?foo=bar">query string</a>
<a href="${uri};foo=bar">path fragment</a>
ここで、${uri}
基本的に$_SERVER['REQUEST_URI']
は、PHP、${pageContext.request.requestURI}
JSP、および#{request.requestURI}
JSF に変換されます。JSFのようなMVCフレームワークには、このすべてのボイラープレートを削減し、の必要性を排除するタグがあることに注意してください<base>
。他のJSFページにリンク/ナビゲートするために使用するURLも参照してください。