iOS 7 - есть ли способ отключить функцию смахивания назад и вперед в Safari?

Для некоторых веб-страниц мы используем функциональные возможности iPhone смахивания влево и вправо, чтобы открыть меню. Теперь, с iOS7, они представили возможность возвращаться и вперед к предыдущей и следующей страницам истории браузера с помощью свайпов влево и вправо.

Но есть ли способ отключить его для определенных страниц, чтобы не было противоречивого поведения при действиях смахивания?


person MeghaK    schedule 19.09.2013    source источник
comment
Его следует отличать по смахиванию, начинающемуся за пределами экрана. У вас есть пример веб-страницы, на которой возникает конфликт?   -  person Rupert Rawnsley    schedule 19.09.2013
comment
@RupertRawnsley Добавьте событие touchstart / touchmove на вашу веб-страницу с помощью console.log ('FIRED!'); в этом. Проведите пальцем по веб-странице от края, и вы заметите, что событие никогда не срабатывает. Правильно ли я предполагаю, что это будет новое ожидаемое поведение?   -  person Marcus    schedule 04.11.2013
comment
@Marcus Это похоже на ожидаемое поведение. Я полагаю, что события смахивания будут работать только в том случае, если они запускаются в пределах некоторого запаса прочности окна браузера. Технически это понятно, но пользовательский опыт будет немного запутанным. Статья, на которую Vinzzz ссылается в приведенном ниже ответе, правильно указывает, что это не просто проблема Safari.   -  person Rupert Rawnsley    schedule 04.11.2013
comment
+1 за это. Утомительно, когда вы проводите пальцем, чтобы открыть меню.   -  person TYRONEMICHAEL    schedule 22.11.2013
comment
+1 Пользователь понятия не имеет, что такое смахивание вне экрана по сравнению с смахиванием по экрану. Блерг!   -  person Joseph Juhnke    schedule 11.01.2014
comment
Изменилось ли что-нибудь в отношении жеста истории в iOS8? Кто-нибудь получил изменение, чтобы поиграть с этим?   -  person AlexZ    schedule 28.09.2014
comment
Как пользователю с плохим зрением мне нужно сильно увеличивать масштаб и панорамировать, этот жест смахивания назад сводит меня с ума. Если кто знает, как это отключить, хочу знать.   -  person Brett Ryan    schedule 10.02.2015
comment
Подтверждено: этот кошмар продолжается в 8.3: /   -  person fguillen    schedule 12.05.2015
comment
Что ж, теперь кошмар распространяется и на автономный режим PWA ... Я ничего не имею против этого UX, но мне действительно нужна настраиваемая опция, чтобы отключить это поведение для приложения для рисования; ((   -  person Sergey Rudenko    schedule 29.03.2019
comment
Я зарегистрировал проблему в Chromium: bugs.chromium.org/p / chromium / issues / detail? id = 1033464 Я знаю, что эта проблема затрагивает несколько браузеров, и вопрос касался Safari, но мы должны с чего-то начать.   -  person naktinis    schedule 15.12.2019
comment
Теперь вы можете (начиная с iOS 13.4): stackoverflow.com/a/62308482/1774081   -  person Rik    schedule 10.06.2020


Ответы (3)


Нет, это делается на уровне ОС, и веб-страница не получает обратного вызова

См. эту сводку изменений сафари в iOS7, которые могут вызвать проблемы на вашем веб-сайте ( включая этот жест смахивания)

person Vinzzz    schedule 19.09.2013

Вы не можете отключить его напрямую, но родное смахивание назад происходит только в том случае, если что-то есть в истории браузера.

Это не будет работать во всех случаях, но если у вас есть одностраничное веб-приложение, открытое на новой вкладке, вы можете предотвратить его добавление в историю, используя

window.history.replaceState(null, null, "#" + url)

вместо pushState или

document.location.hash = url
person Tom Clarkson    schedule 19.04.2014
comment
Да, но это предотвращает только историю в самом приложении при навигации. Другие приложения также могли отправить историю, поэтому iOS тоже обнаружит эту историю. - person dude; 26.05.2015

Пришлось использовать 2 подхода:

1) Исправление только CSS для Chrome / Firefox

html, body {
    overscroll-behavior-x: none;
}

2) Исправление JavaScript для Safari

if (window.safari) {
    history.pushState(null, null, location.href);
    window.onpopstate = function(event) {
        history.go(1);
    };
}

Со временем в Safari будет реализована реализация overscroll-behavior-x и мы сможем удалить взлом JS

person John Doherty    schedule 12.02.2018
comment
Я добавил это, и на Mac это предотвращает повторное срабатывание свайпа влево. Однако он полностью нарушает функциональность возврата (включая кнопку "Назад"), поэтому его нельзя использовать в качестве временного решения. - person Šime Vidas; 11.03.2018
comment
В моем случае это была цель, поскольку я создавал одностраничное приложение. - person John Doherty; 11.03.2018
comment
Но все же возможно, что кто-то откроет ваше приложение, щелкнув ссылку на другом веб-сайте (т. Е. Если этот сайт ссылается на ваше приложение). Чтобы исправить это, вам все равно придется обнаруживать жесты смахивания с помощью событий touchmove и выполнять приведенный выше код только в том случае, если ему не непосредственно предшествовало смахивание. Это должно быть возможно. - person Šime Vidas; 11.03.2018
comment
Я обновил это, чтобы включить параметр только CSS для Chrome и Firefox. - person John Doherty; 07.10.2018
comment
Вы уверены, что это работает на iOS? Я только что протестировал overscroll-behavior-x: none; в Chrome на iOS 13, и это не повлияло на поведение при прокрутке. Смахивание вправо по левому краю возвращает назад (и даже если это первая страница в истории вкладок, она все равно возвращается на главный экран). - person naktinis; 10.12.2019
comment
@naktinis на iOS - это все, что скрывается под капотом Safari, поэтому он не будет работать с ним. - person hromada.dan; 24.02.2020