1. ホーム
  2. html

[解決済み] htmlの<base>タグの推奨事項を教えてください。

2022-03-21 10:14:19

質問事項

見たことがない <base> HTMLタグ は、以前どこかで実際に使用されたことがあります。 その使用には、避けるべき落とし穴があるのでしょうか?

私のサイトでは、リンクを簡素化するのに便利な用途がありそうですが、最新のプロダクションサイト(あるいはどのサイト)で使われているのを見たことがないという事実が、私を不安にさせます。


編集

ベースタグを数週間使用した後、私はいくつかの 主要 baseタグを使用することで、最初の見かけよりもずっと望ましくないことが起こりました。 基本的には href='#topic'href='' ベースタグの下にあるのは 非常に と互換性がなく、このデフォルトの動作からの変更により、コントロール外のサードパーティライブラリが簡単に 非常に信頼性が低い というのも、論理的にデフォルトの動作に依存することになるからです。 大規模なコードベースを扱う場合、この変更は微妙で、すぐには明らかにならない問題につながることがよくあります。 私が経験した問題の詳細については、以下の回答を作成しました。 の広範囲な展開にコミットする前に、自分自身でリンクの結果をテストしてください。 <base> というのが私の新しいアドバイスです。

解決方法は?

baseタグの効果の内訳。

baseタグには直感的でない効果もあるようなので、以下に頼る前に、結果を意識して自分でテストすることをお勧めします。 <base> ! を発見してからは URLが異なるローカルサイトを処理するためにbaseタグを使おうとして、後になってから問題のある効果を知り、がっかりしたのですが、他の人のためにこの潜在的な落とし穴のまとめを作成しなければならないと思っています。

のベースタグを使うことにします。 <base href="http://www.example.com/other-subdirectory/"> を例にして、そのコードがあるページが http://localsite.com/original-subdirectory

専攻

リンクや名前付きアンカー、空白のhrefは、それが明示されない限り、オリジナルのサブディレクトリを指し示すことはないでしょう。 base タグは すべて のリンクは異なっており、ベースタグの url への同一ページのアンカーリンクが代わりに含まれています。

  • <a href='#top-of-page' title='Some title'>A link to the top of the page via a named anchor</a>
    になる
    <a href='http://www.example.com/other-subdirectory/#top-of-page' title='Some title'>A link to an #named-anchor on the completely different base page</a>

  • <a href='?update=1' title='Some title'>A link to this page</a>
    になる
    <a href='http://www.example.com/other-subdirectory/?update=1' title='Some title'>A link to the base tag's page instead</a>

多少の工夫をすれば、自分がコントロールできるリンクについては、これらのリンクがそのページにリンクするように明示的に指定することで、これらの問題を解決できますが、標準の動作に依存するサードパーティのライブラリを追加すると、簡単に大混乱を引き起こしかねません。

マイナー

条件付きコメントが必要なIE6の修正。IE6では、dom階層を台無しにしないために、条件付きコメントが必要です。 <base href="http://www.example.com/"><!--[if lte IE 6]></base><![endif]--> として BalusC は、上記の回答で触れています。

というわけで、全体としては、すべてのリンクを完全に編集制御できる人でないと使いにくいという大きな問題があり、当初懸念していたとおり、それだとかえって面倒なことになりますね。 今、私は自分の使い方をすべて書き直さなければならないのです。:p

fragments"/hashes使用時の問題点検証の関連リンクです。

http://www.w3.org/People/mimasa/test/base/

http://www.w3.org/People/mimasa/test/base/results


編集者:イジー コメントについて、私と同じような混乱に陥っているすべての人のために。

今、自分でテストしてみたところ、以下のような結果になりました。

  • を使っても使わなくても、ここに挙げた例には違いがありません ( #anchor?query は、単に指定された <BASE> ).
  • ただし、相対リンクの場合は、末尾のスラッシュが省略されるという違いがあります。 other.htmldir/other.html で始まることになります。 DOCUMENT_ROOT を指定した場合。 /other-subdirectory は、(正しく)ファイルと扱われるため、省略されます。

では、相対リンクの場合。 BASE は移動したページで問題なく動作しますが、アンカーと ?queries の場合、ファイル名を明示的に指定する必要があります。 BASE には、末尾にスラッシュがあるか、最後の要素が使用されているファイルの名前に対応していません)。

と考えてください。 <BASE> を置き換えて ファイル自体への完全なURL (そして ない をクリックすると、正しく表示されます。この例で使われたファイルが、仮に other-subdirectory/test.html (新しい場所に移動した後)。 であれば、正しい仕様となるはずでした。

<base href="http://www.example.com/other-subdirectory/test.html ">

- et voila, すべて は期待通りに動作します。 #anchor , ?query , other.html , very/other.html , /completely/other.html .