1

次の jquery スクリプトを使用して、新しいページへのリンクを開き、スクロール効果を持たせています。ただし、Firefox 11.0 では動作しません。

var jump = function (e) {
    if (e) {
        e.preventDefault();
        var target = $(this).attr("href");
    } else {
        var target = location.hash;
    }

    $('html,body').animate(
{
   scrollTop: $(target).offset().top
}, 2000, function () {
   location.hash = target;
});

}

$('html, body').hide();

$(document).ready(function () {
    $('a[href^=#]').bind("click", jump);

    if (location.hash) {
        setTimeout(function () {
            $('html, body').scrollTop(0).show();
            jump();
        }, 1000);
    } else {
        $('html, body').show();
    }
});

setTimeout のこの部分を過ぎてループし続け、最初からやり直し続けます。

$('html, body').scrollTop(0).show();
jump();

これは Firefox 11.0 でのみ発生します。これを修正する方法または回避策を知っている人はいますか?

4

3 に答える 3

1

window.setTimeoutそう呼ばれるべきだと思うので使ってみてください。また、タイムアウト0を使用しているのに、なぜですか?

于 2012-04-11T18:44:48.550 に答える
0

タイムアウト0で使用setTimeoutすることは、基本的にはまったく使用setTimeoutしなかったかのようであり、Firefoxはそれを好まないと思います。

于 2012-04-11T18:51:30.143 に答える
0

エラーは MVC フレームワークにありました。それを発見したのはペトル・ヴォストレルだったので、彼の功績を称えます。これが彼が見つけたものです。

MicrosoftAjax コンポーネントは、一部のブラウザーの履歴管理を試み、そのために URL のハッシュ部分を使用します。これは、この時点まで有効な標準手順です。初期化時に、Sys$_Application$initialize()スルー_navigate()_raiseNavigate()アプリケーション メソッドに関与します。そして、これは Firefox に特化したいくつかのダンスを行います:

// Name:        MicrosoftAjax.debug.js
// Assembly:    System.Web.Extensions
// Version:     4.0.0.0
// FileVersion: 4.0.20526.0

if ((Sys.Browser.agent === Sys.Browser.Firefox) && window.location.hash &&
(!window.frameElement || window.top.location.hash)) {
window.history.go(0);
}

3 つの条件:

browser is Firefox
address carries a hash portion after the URL
it is not inside a frame

それらのすべてがあなたのケースで通過し、獣が解き放たれます:

window.history.go(0);

これは、ブラウザーの履歴マネージャーに、引数として指定された距離だけ前後に移動するように指示します。-2 で 1 つ戻り、1 で 1 つ進みます。したがって、0 はページを効果的にリロードします。そして、ページに与えられたハッシュのすべてのページ読み込みでそれを行います。とにかく、この行の有効な目的は考えられません...

かなり毛むくじゃらで無意味な行をコメントアウトすれば、案の定、うまくいきます! これは Firefox 3.5 以前との下位互換性を保つための試みのようです。そのため、削除するか、MVC を更新することをお勧めします。

于 2012-04-12T19:17:46.757 に答える