我最近的任务是弄清楚如何为我公司的内部 SharePoint 2010 网站维护滚动条定位。不幸的是,开箱即用的“MaintainScrollPositionOnPostBack”并没有得到我们想要的结合文本框聚焦要求的结果(包括隐藏字段中持久值的问题)。
在我最有希望的解决方案中,我在 javascript 中为滚动的 SharePoint div ('#s4-workspace') 设置滚动值,以便在按下浏览器后退/前进按钮时运行它。(在这种情况下,我将滚动值存储在 sessionStorage 中,但我仍在尝试使用其他持久媒体)。
我使用以下代码重新加载滚动位置,为共享点站点中的主可滚动 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 中的内容仍然滚动到顶部(换句话说,内容没有随着滚动条滚动)。有趣的是,如果我在 setTimeout 中调用此函数并等待两秒钟,它会滚动正常(但是,较短的值不会)。
setTimeout(function () { RestoreScrollState('s4-workspace'); }, 2000);
我已经尝试搜索了一段时间,但没有发现任何有用的东西。有没有人遇到过这样的问题,除了长时间的超时之外,还有另一种解决方法吗?