タグを使用するかどうかを決定する前に、<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は別の方法で考え、タグの後のコンテンツ全体がHTMLDOMツリーの要素の子として配置されます。これにより、Javascript / jQuery / CSSで一見説明できない問題が発生する可能性があります。つまり、HTML DOMインスペクターで間に(と)があるはずであることがわかるまで、のような特定のセレクターでは要素に完全に到達できません。<base><base>html>bodybasehead
一般的な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>の相対URIを持つリソースが要求されます。src
<base>タグでまたはなどの相対URIを使用すると、IEの別の潜在的な問題が発生し<base href="//example.com/somefolder/">ます<base href="/somefolder/">。これはIE6/7/8では失敗します。ただし、これはブラウザのせいではありません。タグで相対URIを使用すること<base>は、それ自体が間違っています。HTML4仕様では、絶対URIである必要があると規定されているため、 http://orhttps://スキームで始まります。これは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も参照してください。