SharePoint 2016 в локальной среде: как перейти к началу страницы?

Мой вариант использования очень прост: я нахожусь в форме настраиваемого списка (измененный NewForm.aspx, добавленный с помощью SharePoint Designer). Я добавил кнопку и хочу, чтобы, когда пользователи нажимают на нее, страница прокручивалась обратно на самый верх.

Я пробовал следующий подход:

В aspx

<button onclick="return MyScrollTop()">SCROLL TOP</button>

В javascript

function MyScrollTop() {
    //All my attemps go here

    return false; 
}

Я не детализирую, как я удостоверяюсь, что функция вызывается (иногда это может быть сложно в SharePoint, с MDS и _spBodyOnLoadFunctionNames.push, но я на 100% уверен, что моя функция вызывается так, как я вижу в отладчик браузера.

Я использую IE11 в режимах «10» и «Edge».

Вот мои попытки (я пробовал их одну за другой, а не в одной и той же функции)

//attempt #1 (as seen on W3C)
document.body.scrollTop = 0;
document.documentElement.scrollTop = 0;

//attempt #2 (as seen on Stack Overflow for regular javascript)
window.scrollTo(0,0);

//attempt #3 (as seen on Stack Overflow for some corner case - desperate attempt)
window.scroll(0,0);

//attempt #4 (as seen on Stack Overflow to fight SharePoint's '_maintainWorkspaceScrollPosition' hidden control on a page reload or unload)
var scrollX = document.getElementById('__SCROLLPOSITIONX');
var scrollY = document.getElementById('__SCROLLPOSITIONY');
if (scrollX && scrollY) {
    scrollX.value = 0;
    scrollY.value = 0;
}

var workspaceY = document.getElementById('_maintainWorkspaceScrollPosition');
if (workspaceY) {
    workspaceY.value = 0;
}

Ничего из этого не работает. Когда я нажимаю на кнопки, точки останова показывают мне, что мой скрипт выполняется, но это похоже на window.scrollTo и другие, не имеющие никакого эффекта.

Я поставил точку останова в этой функции SharePoint из init.js, чтобы посмотреть, смогу ли я где-нибудь зацепиться, но я не уверен, что мне делать:

if (!g_setScrollPos) {
    if (browseris.firefox && browseris.firefox36up)
        window.scrollTo(0, 0);
    if (Boolean((ajaxNavigate.get_search()).match(RegExp("[?&]IsDlg=1")))) {
        if (!isIE7 || elmWorkspace.scrollHeight < elmWorkspace.clientHeight)
            elmWorkspace.style.overflowY = "auto";
    }
    var scrollElem = document.getElementById("_maintainWorkspaceScrollPosition");

    if (scrollElem != null && scrollElem.value != null) {
        elmWorkspace.scrollTop = Number(scrollElem.value);
    }
    g_setScrollPos = true;
}
CallWorkspaceResizedEventHandlers();
g_frl = false;

person jeancallisti    schedule 14.02.2018    source источник


Ответы (1)


Наконец-то мне удалось это сделать вот так:

var w = document.getElementById("s4-workspace");
w.scrollTop = 0;
person jeancallisti    schedule 14.02.2018