1

私は最近、会社の内部SharePoint2010サイトのスクロールバーの位置を維持する方法を理解するという任務を負っています。残念ながら、すぐに使用できる「MaintainScrollPositionOnPostBack」では、テキストボックスのフォーカス要件(非表示フィールドの永続化された値の問題を含む)と組み合わせて必要な結果が得られません。

私の最も有望なソリューションでは、スクロールするSharePoint div('#s4-workspace')のスクロール値をjavascriptで設定して、ブラウザーの戻る/進むボタンが押されるたびに実行されるようにします。(この場合、スクロール値をsessionStorageに保存していますが、他の永続メディアを試しています)。

次のコードを使用してスクロール位置を再読み込みし、SharePointサイトのメインのスクロール可能なdivに「s4-workspace」を渡します。

function RestoreScrollState(workspaceID) {
    var itemScrollDataIdentifier = pageScrollDataIdentifier + '-' + workspaceID;
    var coordStr = sessionStorage[itemScrollDataIdentifier];
    if (coordStr) {
        var scrollable = $('#' + workspaceID);
        var coords = $.parseJSON(coordStr);
        scrollable.scrollLeft(coords.x);
        scrollable.scrollTop(coords.y);
        return coords;
    }
    return null;
}

これはIE8、IE9、およびChromeでうまく機能しますが、Firefox(17.0.1)で問題が発生しています。この関数を呼び出すと、スクロールバーは正しい位置に設定されていますが、「s4-workspace」div内のコンテンツは上にスクロールされたままです(つまり、コンテンツはスクロールバーでスクロールされませんでした)。興味深いことに、この関数の呼び出しを2秒間待機するsetTimeoutで囲むと、正常にスクロールします(ただし、値が短い場合はスクロールしません)。

setTimeout(function () { RestoreScrollState('s4-workspace'); }, 2000);

しばらく検索してみましたが、何も役に立ちませんでした。誰かがこのような問題に遭遇し、長いタイムアウト以外の別の回避策でそれを回避しましたか?

4

1 に答える 1

0

さらに数時間壁に頭をぶつけた後、最終的に解決策を見つけました。問題は、SharePoint がまだそのコンテンツ (「sp.js」から) をロードしている最中であり、ファンキーなものが原因で発生したようです。スクロールバーの設定に関係します。SP スクロールバーが完全に初期化される前に、スクリプト駆動の変更が適用されている必要があります。したがって、ここで行う必要があったのは次のとおりです。

$(document).ready(function(){
    ExecuteOrDelayUntilScriptLoaded(runAfterSharePointIsDoneBeingStupid, 'sp.js');
});

function runAfterSharePointIsDoneBeingStupid(){
    //code to persist scrollbar position here
}

私の名前で表現された失礼な感情をお許しください...SharePointと私は非常に複雑な関係にあります... ;)

于 2012-12-08T17:08:17.300 に答える