私は最近、会社の内部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);
しばらく検索してみましたが、何も役に立ちませんでした。誰かがこのような問題に遭遇し、長いタイムアウト以外の別の回避策でそれを回避しましたか?