Safari для рабочего стола автоматически прокручивает страницу до любого элемента ввода, на котором я фокусируюсь из javascript.Это поведение можно увидеть прямо здесь:
https://codepen.io/anon/pen/JmKPwZ
Я не нашел способа предотвратить эту автоматическую прокрутку.Однако существует известный обходной путь - сначала сохраните положение экрана и прокрутите назад до этой позиции после фокусировки:
var el = document.getElementById("editable");
var x = window.scrollX, y = window.scrollY; // save position
el.focus();
// manipulate selection inside the focused element with `document.createRange()`
// and do other stuff
window.scrollTo(x, y); // restore position
Этот обходной путь работал нормально в Safari 10 и перестал работать в Safari 12. Вызов scrollTo
после фокусировки больше ничего не делает.Однако, если scrollTo
выполняется с задержкой (даже очень короткой), все работает:
var el = document.getElementById("editable");
var x = window.scrollX, y = window.scrollY; // save position
el.focus();
// manipulate selection inside the focused element with `document.createRange()`
// and do other stuff
setTimeout(function() {
window.scrollTo(x, y); // restore position
}, 1);
Но с этой задержкой в 1 миллисекунду можно увидеть, как страница сначала прокручивается в поле ввода изатем очень быстро вернуться к исходному положению, поэтому новый обходной путь далек от совершенства.
Есть ли способ изящно запретить настольному Safari автоматически прокручивать страницу до целевого элемента или, по крайней мере, хороший обходной путь для смягчения этогоповедение?