21

<base>タグが使用されているこのサイトに、いくつかのハッシュリンク(コンテンツテーブルの形式で、Webページのナビゲーションを容易にするため)を追加しようとしています。

明らかにベースタグが原因で、他のすべての相対タグはベースタグhrefに相対的です。特定のページのさまざまな部分を指すリンクを使用してこの内部コンテンツテーブルを作成するには、内部リンクが正しく機能するように、デフォルトのURLを取得する必要があります(ベースタグが有効になる前)。

ベースタグを回避してこれを達成する方法はありますか?

4

5 に答える 5

11

baseタグの効果はドキュメントに対してグローバルであり、の効果をオーバーライドする唯一の方法<base href="...">は絶対URLを使用することです。

window.locationドキュメントがHTTP経由で取得された場合は、JavaScriptで使用してページ自体のURLを取得できます。そして、それを使用して絶対URLを作成できます。

最近は通常、baseタグは必要ありません。1つ以上のベースアドレスからアドレスを作成できるサーバー側テクノロジを使用することをお勧めします。したがって、おそらく最善のアプローチは、タグを取り除くことです。

于 2012-09-06T16:32:03.340 に答える
5

javascriptとjQueryを使用してこれを「修正」できます-

// get all the internal anchors inside #article 
$('#article a').each(
        function() {
            // get the href attribute
            href = $(this).attr('href');
            // does it have a href?
            if (href) {
                // does it have an internal anchor?
                if (href.match(/#/i)) {
                    // append window.location and write back to the href Attribute
                    new_href = window.location + href;
                    $(this).attr('href', new_href);
                }
            }
        }
    );
于 2013-04-24T14:28:23.030 に答える
2

ちょっとした代替手段として、ローカルURLを取得し、ベースhrefを保持するには、これを試すことができます。

$('a.local').each(
    function () {
		// get the href attribute
		var href = $(this).attr('href');
		// does it have a href?
		if (href) {
			var lastSlash = window.location.toString().lastIndexOf("/");
			var new_href = window.location.toString().substr(0, lastSlash + 1) + href;
			$(this).attr('href', new_href);
		}
	});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<base href="http://www.google.com">
<a class="local" href="mylocalpage.html">local page</a>
<a href="pageOnRemoteServer.html">remote page</a>

于 2016-07-12T15:04:00.523 に答える
1

リンクの前にaを追加すると、/機能するはずです。あなたが持っているとしましょう<base href="/assets/images/" />。を使用する場合は<img src="logo.png" />、ロードするよりも/assets/images/logo.png。それ以外の場合、を使用すると、ルートディレクトリから<img src="/logo.png" />ロードされます。/logo.png

于 2014-05-31T12:53:35.997 に答える
0

タグhref内のを無視して、相対的なスタイルシートを含める必要がありました。タグの前にスタイルシートを置いても、は影響を受けないことがbaseわかりました。linkbasehref

私はこの情報に基づいています:

次の属性のいずれかを指定する場合、この要素は、's href属性など、URLの属性値を持つ他の要素の前に配置する必要があります。

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/baseから

aこれには、タグをドキュメントheadに配置してから、何らかの方法でタグを正しい場所に表示するようにスタイル設定する必要がある可能性が高いと思います。したがって、このトリックはあまり役に立たないかもしれません。

注:ドキュメントには、ベースタグはURLを使用する要素の前に「配置する必要がある」と記載されているため、仕様によれば、私が行ったことは合法ではない可能性があります。

于 2021-07-28T17:32:16.027 に答える