2012-12-07 90 views
1

我最近一直在負責搞清楚如何維護我公司內部的SharePoint 2010網站的滾動條位置。不幸的是,開箱即用的「MaintainScrollPositionOnPostBack」沒有得到我們希望結合文本框聚焦要求的結果(包括隱藏字段中持久化值的問題)。內容不與滾動條滾動在Firefox

在我最有前途的解決方案,我在JavaScript設置滾動值滾動的SharePoint DIV(「#S4-工作區」),這樣可以隨時瀏覽器的後退/前進按鈕被按下運行。 (在這種情況下,我在sessionStorage中存儲滾動值,但我仍在試驗其他持久性媒體)。

我使用下面的代碼重新加載該滾動位置,在「S4-工作區」通過在SharePoint站點的主可滾動的div。

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內的內容仍然滾動到頂部(換句話說,內容不隨滾動條滾動)。有趣的是,如果我在setTimeout中用兩秒鐘的等待將我的調用包圍在這個函數中,它會滾動ok(但是較短的值不會)。

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

我試過了一會兒,現在還沒有找到有用的東西。有沒有人遇到過這樣的問題,並且除了長時間的暫停之外還有另外一種解決方法?

回答

0

終於在將我的頭靠在牆上幾個小時後發現了一個解決方案:看起來問題是由於SharePoint仍在加載其內容的過程中(來自'sp.js'),並且因爲在設置滾動條時所做的時髦事情中,我的腳本驅動的更改必須在SP滾動條完全初始化之前應用。所以這是必須做的:

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

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

請原諒我...命名的SharePoint表達任何粗魯的情緒,我有一個非常複雜的關係...;)