見たことがない<base>
HTMLタグ実際にこれまでどこでも使用されたことはありません。使用にあたり、避けるべき落とし穴はありますか?
最近の実際のサイト (または任意のサイト) で使用されているのを見たことがないので、私はこれに警戒感を抱いていますが、私のサイト上のリンクを簡素化するのに役立つ可能性があるように思えます。
編集
数週間ベース タグを使用した後、ベース タグの使用に関するいくつかの大きなhref='#topic'
落とし穴が見つかり、最初に思ったよりも望ましくないことがわかりました。基本的に、ベース タグへの変更とhref=''
ベース タグの下の変更は、デフォルトの動作と非常に互換性がなく、このデフォルトの動作からの変更により、制御できないサードパーティ ライブラリが、論理的にデフォルトの動作に依存するため、予期しない方法で非常に信頼できないものになる可能性があります。多くの場合、変更は微妙で、大規模なコードベースを扱うときにすぐには明らかではない問題につながります。その後、私が経験した問題を詳しく説明する回答を作成しました。したがって、 の広範な展開にコミットする前に、リンクの結果を自分でテストしてください。これが<base>
私の新しいアドバイスです。
ベストアンサー1
タグを使用する<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 でのみ問題を引き起こします。タグは HTML では終了タグ を持たないよう<base>
に指定されているため、終了タグなしで使用するのは正当です。しかし、IE6 はそうではないと認識し、そのような場合、 タグの後の内容全体が HTML DOM ツリーの要素の子として配置されます。これにより、 Javascript/jQuery/CSS で一見説明できない問題が発生する可能性があります。つまり、 などの特定のセレクターで要素に完全にアクセスできない状態になりますが、HTML DOM インスペクターで間に(および)があることがわかるようになります。</base>
<base>
<base>
<base>
html>body
base
head
IE6 の一般的な修正方法は、IE 条件付きコメントを使用して終了タグを含めることです。
<base href="http://example.com/en/"><!--[if lte IE 6]></base><![endif]-->
W3 Validator を気にしない、またはすでに HTML5 を使用している場合は、すべての Web ブラウザーがそれをサポートするので、それを自動的に閉じることができます。
<base href="http://example.com/en/" />
タグを閉じると<base>
、狂気WinXP SP3 上の IE6 では、無限ループ内<script>
で相対 URI を使用してリソースを要求します。src
<base>
IEのもう1つの潜在的な問題は、タグ内で相対URI( または<base href="//example.com/somefolder/">
など)を使用すると発生します<base href="/somefolder/">
。これはIE6/7/8では失敗します。ただし、これはブラウザのせいではありません。タグ内で相対URIを使用すること<base>
自体が間違っているのです。HTML4仕様絶対URIであるべきであると述べており、したがってhttp://
orhttps://
スキームで始まる。これは削除された。HTML5仕様したがって、HTML5 を使用し、HTML5 対応ブラウザーのみをターゲットにする場合は、タグで相対 URI を使用すれば問題ありません<base>
。
のような名前付き/ハッシュフラグメントアンカー<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>
は、PHP、JSP、 JSFでは${uri}
基本的に に変換されます。JSFなどのMVCフレームワークには、この定型句をすべて削減し、 の必要性を排除するタグがあることに留意してください。aoも参照してください。$_SERVER['REQUEST_URI']
${pageContext.request.requestURI}
#{request.requestURI}
<base>
他の JSF ページにリンクまたは移動するために使用する URL。