2012-09-06 24 views
11

<base>タグが使用されているこのサイトに(ウェブページのナビゲーションを容易にするためにコンテンツテーブルの形式で)ハッシュリンクを追加しようとしています。<base>タグをタグ自体を削除せずに上書きする方法はありますか?

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

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

+0

"特定のページの異なる部分を指す内部リンク"?どんな例を挙げてもいいですか? –

答えて

8

baseタグの効果は文書全体であり、<base href="...">の効果を無効にする唯一の方法は絶対URLを使用することです。

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

通常、baseタグは現在不要です。 1つまたは複数のベースアドレスからアドレスを構築できるようにするサーバー側のテクノロジを使用する方が適しています。だから、おそらく最良の方法は、タグを取り除くことです。

+1

残念ながら* ''タグに*依存している電子商取引ソフトウェアを使用しているので、まだそこにあります。おそらくほとんど知られていない事実:あなたの基底がサブディレクトリであれば、 '../relative'リンクはベースタグと一緒に動作します。 –

+1

../で始まるリンクは、当然、パス部分のセグメントを含むベースアドレスで動作します。あなたは 'base'タグをオーバーライドしておらず、ただその影響下を移動しています。 –

+0

ありがとうございました。私は自分のページのデフォルトURLを取得することができました。 – sSmacKk

3

あなたでした「修正」は、このいくつかの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); 
       } 
      } 
     } 
    ); 
+1

あなたの答えをありがとう。変数を定義するときは 'var'を使う方が良いでしょう。さもなければ、それらはグローバルスコープで定義されます。 –

1

が作業を行う必要があります/前にリンクを追加します。 <base href="/assets/images/" />があるとします。 <img src="logo.png" />を使用する場合は、/assets/images/logo.pngをロードします。それ以外の場合は、<img src="/logo.png" />を使用すると、ルートディレクトリから/logo.pngが読み込まれます。

+0

*/*の追加は半分正しいです...あなたはプロトコルをスキップし、二重の '//'を残したと仮定します。 – yckart

1

ローカルURLを持ち、ベースhrefを保持するには、少し試してみてください。 `のhref = "#タブ-2"`:...あなたのような、ハッシュリンクについて話している

$('a.local').each(
 
    function() { 
 
\t \t // get the href attribute 
 
\t \t var href = $(this).attr('href'); 
 
\t \t // does it have a href? 
 
\t \t if (href) { 
 
\t \t \t var lastSlash = window.location.toString().lastIndexOf("/"); 
 
\t \t \t var new_href = window.location.toString().substr(0, lastSlash + 1) + href; 
 
\t \t \t $(this).attr('href', new_href); 
 
\t \t } 
 
\t });
<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>

関連する問題