HTML におけるベースタグの使用に関する詳細な説明

HTML におけるベースタグの使用に関する詳細な説明

requireJS には、baseURL というプロパティがあります。baseURL を設定することで、現在のページではなく、プロジェクトを基準にして読み込むファイル パスを記述できます。

たとえば、プロジェクト ディレクトリが /myproject/ で、その中に 2 つのページがあり、1 つは /myproject/one.html、もう 1 つは /myproject/html/other.html で、両方のページが /myproject/js/some.js を読み込む必要があるとします。 baseURL を /myproject/ に設定すると、js をロードするときに、ページ パスが異なるために異なる相対パスを使用するのではなく、両方のページでプロジェクトに対する相対パス ./js/some を使用できます。

しかし、requireJS を使用しない場合、baseURL と同様の機能を実現できるでしょうか?

ベースタグ
実際、HTML には同様の機能を生成できる基本タグがあります。例えば:

コードをコピー
コードは次のとおりです。

<html>
<ヘッド>
<base href="http://static.cnblogs.com/" />
</head>
<本文>
<img src="./images/logo_gray.gif" />
</本文>
</html>

相対パス ./images/logo_gray.gif を使用してロードした画像は、画像 http://static.cnblogs.com/images/logo_gray.gif になることがわかります。

ベース タグは、ページのリンクにデフォルトのパスまたはデフォルトの開く方法を追加できます。

デフォルトの開く方法を設定する例を次に示します。

コードをコピー
コードは次のとおりです。

<html>
<ヘッド>
<ベースターゲット="_blank" />
</head></p> <p><body>
<a href="http://www.cnblogs.com">このページは新しいウィンドウで開きます</a>
<a href="http://justany.cnblogs.com">このページも新しいウィンドウで開きます</a>
</本文>
</html>

バグ
ベース タグを動的に記述しないことをお勧めします。そうしないと、http://localhost/static/test.html のページのように、Firefox と IE で小さなバグが発生します。

コードをコピー
コードは次のとおりです。

<html>
<ヘッド>
<スクリプト>
document.write('<base href="http://localhost/" />');
</スクリプト>
</head></p> <p><body>
<img src="static/1.jpg" />
</本文>
</html>

Firefox と IE は、最初に http://localhost/static/static/1.jpg を読み込み、次に http://localhost/static/1.jpg を読み込みます。つまり、まず現在のページを基準としたパスで読み込みを試み、次にベース タグで設定されたデフォルトのパスで読み込みを試みます。

Chrome は正常に読み込まれます。

Firefox が正しく読み込まれません。

なぜ?

これについて、適切な説明が見つかりませんでした。私たちの分析では、ブラウザがリソースの読み込みを最適化しているため、動的に挿入されたベース タグが有効にならないときに、ブラウザがリソースを事前読み込みすることになります。その結果、エラーが発生し、その後、ベース タグが有効になり、正しいリソースが読み込まれます。

どうすれば回避できるでしょうか?ベースタグを動的に記述しなくても問題ありません。ベース タグを動的に記述する必要がある場合は、ページによって参照されるすべての外部リソースを JavaScript を通じて動的に読み込む必要があります。

<<:  Vuex環境の詳細な説明

>>:  Navicat 接続 MySQL エラーの説明分析

推薦する

MYSQL接続ポートが占有され、ファイルパスエラーが発生する問題を解決します

今朝、私は Wampserver を使用してローカルの win7 マシン上に PHP 環境を構築し、...

CentOS のデフォルトの SSH ポート番号を変更する方法の例

LinuxサーバーのデフォルトのSSHポート番号は通常22なので、ほとんどのユーザーはセキュリティ上...

Windows システムでの MySQL 8.0.21 インストール チュートリアル (図とテキスト)

インストールの提案: インストールには .exe を使用せず、圧縮パッケージを使用してください。これ...

JavaScript ES6 モジュールの詳細な説明

目次0. モジュールとは何か1.モジュールの読み込み1.1 方法1 1.2 方法2 2. 輸出と輸入...

Navicat for MySQLのスケジュールされたデータベースバックアップとデータ復旧の詳細

データベースの変更または削除操作によってデータ エラーが発生したり、データベースがクラッシュしたりす...

Linux システムのパフォーマンスを分析するための top コマンドの詳細な説明

Linux topコマンドの紹介top コマンドは、Linux でよく使用されるパフォーマンス分析ツ...

2列の水平タイムラインを実装するためのVueサンプルコード

目次1.コンポーネントtimelineH.vueを実装する2. コンポーネントの呼び出しこの記事では...

JavaScript セレクター関数 querySelector および querySelectorAll

目次1. querySelectorは単一の要素を照会する1. ドキュメントインスタンスの呼び出し2...

MySQL での or ステートメントの使用例

1. MySQL での or 構文の使用、および MySQL 構文で or を使用する際の注意点。 ...

単一のdivの正多角形変換を実現する純粋なCSS

前回の記事では、beforeとafterの擬似要素を使用してMaterial Designスタイルの...

WeChatアプレットがフォーム検証を実装

WeChatアプレットフォームの検証、参考までに具体的な内容は次のとおりです。プラグインWxVali...

Linux でスペースを含むファイルを削除する (ディレクトリではない)

日常業務では、スペースのないファイルに遭遇することがよくあります。これにより、削除操作がはるかに簡単...

Mybatis マッパー動的プロキシの原理の分析

序文動的プロキシの原理を説明する前に、まず、mybatis を統合した後の dao 層の 2 つの実...

nginx ウェブサイト サービスのアンチホットリンクを設定する方法 (推奨)

1. ホットリンクの原則1.1 Webページの準備Web ソース ホスト (192.168.153...

フロントエンドJavaScriptのクラス

目次1. クラス1.1 コンストラクタ() 1.2 ゲッターとセッター1.3 これ1.4 静的プロパ...