我最近的任务是弄清楚如何维护公司内部SharePoint 2010网站的滚动条定位。不幸的是,开箱即用的“MaintainScrollPositionOnPostBack”没有得到我们想要的结果与文本框聚焦要求(包括隐藏字段中持久值的问题)。
在我最有希望的解决方案中,我在javascript中为滚动的SharePoint div('#s4-workspace')设置滚动值,以便在按下浏览器后退/前进按钮时运行它。 (在这种情况下,我将滚动值存储在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中的内容仍然滚动到顶部(换句话说,内容没有滚动条滚动)。有趣的是,如果我在setTimeout中使用两秒钟等待我对此函数的调用,它会滚动正常(但是较短的值不会)。
setTimeout(function () { RestoreScrollState('s4-workspace'); }, 2000);
我已经尝试过一段时间了,但是没有发现任何有用的东西。有没有人遇到这样的问题,并且除了长时间超时之外还有其他解决方法?
答案 0 :(得分:0)
最后在将我的头撞到墙上几个小时之后找到了一个解决方案:似乎问题是因为SharePoint仍然在加载其内容(来自'sp.js'),并且因为它设置滚动条时所做的时髦事情,我的脚本驱动的更改必须在SP滚动条完全初始化之前应用。所以这就是必须要做的事情:
$(document).ready(function(){
ExecuteOrDelayUntilScriptLoaded(runAfterSharePointIsDoneBeingStupid, 'sp.js');
});
function runAfterSharePointIsDoneBeingStupid(){
//code to persist scrollbar position here
}
请原谅我在命名中表达的任何粗鲁的情绪...... SharePoint与我的关系非常复杂......;)