2012-12-07 144 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表达任何粗鲁的情绪,我有一个非常复杂的关系...;)