2

JavaScript を使用して、メイン ページのアンカーに移動しています。メイン ページ内からアンカー リンクをクリックすると、URL は同じままです: localhost/ (javascript ScrollTo を使用) ですが、別のページからそのアンカー タグにリンクしようとすると、URL にアンカー タグが表示されます。ローカルホスト/#anchor.

アンカー タグを表示しないように URL をマスクするにはどうすればよいですか?

<li><%= link_to "Anchor", root_path(:anchor => 'anchor') %></li>

jquery:

$('a[href*=#]:not([href=#])').click(function() {
    if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') 
        || location.hostname == this.hostname) {

        var target = $(this.hash);
        target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
           if (target.length) {
             $('html,body').animate({
                 scrollTop: target.offset().top
            }, 1000);
            return false;
        }
    }
4

2 に答える 2

4

メイン ページのアンカーをクリックすると、実際には Rails にリクエストが送信されるのではなく、クリック ハンドラが実行されるだけです。しかし、別のページからアクセスしている場合、Rails にリクエストを送信していることになり、#fragment はページのどこにスクロールすればよいかを知る唯一の方法です。

あなたができる最善のことは、ページをロードするときにJSで#fragmentを検出し、適切な場所までスクロールし、フラグメントを削除することです

history.replaceState({}, '', window.location.href.substring(0, window.location.href.indexOf('#')))

をサポートするブラウザを使用していると仮定しますreplaceState。古いブラウザーに優しくしたい場合は、 History.jsを使用できます。

于 2013-04-28T21:53:46.937 に答える