タグを使用するかどうかを決定する前に、<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>body
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>
の相対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も参照してください。