iOS 7 - Gibt es eine Möglichkeit, die Funktion zum Zurück- und Weiterwischen in Safari zu deaktivieren?

82

Für einige Webseiten verwenden wir die Wischfunktion nach links und rechts des iPhone, um die Menüs aufzurufen. Mit iOS7 haben sie nun die Möglichkeit eingeführt, bei Wischen nach links und rechts zu vorherigen und nächsten Seiten des Browserverlaufs vor- und zurückzuspulen.

Aber gibt es eine Möglichkeit, es für bestimmte Seiten zu deaktivieren, damit bei den Wischaktionen kein widersprüchliches Verhalten auftritt?

MeghaK
quelle
Es sollte durch das Streichen außerhalb des Bildschirms unterschieden werden. Haben Sie eine Beispielwebseite, auf der ein Konflikt auftritt?
Rupert Rawnsley
@RupertRawnsley Fügen Sie Ihrer Webseite ein touchstart / touchmove-Ereignis mit einem console.log hinzu ('FIRED!'); drin. Bewegen Sie Ihren Finger vom Rand auf die Webseite und Sie werden feststellen, dass das Ereignis niemals ausgelöst wird. Habe ich Recht, wenn ich davon ausgehe, dass dies das neue erwartete Verhalten sein wird?
Marcus
2
+ 1 dafür. Problematisch beim Streichen, um ein Menü zu öffnen.
TYRONEMICHAEL
2
+1 Der Benutzer hat keine Ahnung, was ein Offscreen-Swipe im Vergleich zu einem Onscreen-Swipe ist. Blergh!
Joseph Juhnke
1
Als Benutzer mit schlechtem Sehvermögen muss ich viel zoomen und schwenken. Diese Geste des Zurückwischens macht mich wahnsinnig. Wenn jemand weiß, wie man es deaktiviert, möchte ich es wissen.
Brett Ryan

Antworten:

12

Sie können es nicht direkt deaktivieren, aber das native Zurückwischen erfolgt nur, wenn sich etwas im Browserverlauf befindet.

Es funktioniert nicht in jedem Fall, aber wenn Sie eine einzelne Seiten-Webanwendung in einem neuen Tab geöffnet haben, können Sie mithilfe von verhindern, dass sie zum Verlauf hinzugefügt wird

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

anstelle von pushState oder

document.location.hash = url
Tom Clarkson
quelle
5
Ja, aber dies verhindert nur den Verlauf in der App selbst beim Navigieren. Andere Apps haben möglicherweise auch einen Verlauf verschoben, daher erkennt iOS auch diesen Verlauf.
Alter
5

Ich musste 2 Ansätze verwenden:

1) CSS nur für Chrome / Firefox behoben

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

2) JavaScript-Fix für Safari

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

Im Laufe der Zeit wird Safari Overscroll-Behaviour-X implementieren und wir werden den JS-Hack entfernen können

John Doherty
quelle
Ich habe dies hinzugefügt und auf dem Mac wird verhindert, dass ein Linksschlag zurück ausgelöst wird. Die Back-Funktionalität wird jedoch vollständig unterbrochen (einschließlich der Schaltfläche Back), sodass sie nicht als Problemumgehung verwendet werden kann.
Šime Vidas
In meinem Fall war das das Ziel, als ich eine App mit nur einer Seite erstellte
John Doherty
2
Es ist jedoch weiterhin möglich, dass jemand Ihre App öffnet, indem er auf einen Link auf einer anderen Website klickt (dh wenn diese Website auf Ihre App verweist). Um dies zu beheben, müssten Sie immer noch Wischgesten über touchmoveEreignisse erkennen und den obigen Code nur ausführen, wenn ihm nicht unmittelbar ein Wischen vorausgeht. Es sollte möglich sein.
Šime Vidas
Ich habe dies aktualisiert, um eine CSS-Option für Chrome und Firefox aufzunehmen
John Doherty
Sind Sie sicher, dass dies unter iOS funktioniert? Ich habe gerade overscroll-behavior-x: none;auf Chrome unter iOS 13 getestet und es hatte keine Auswirkungen auf das Swipe-Navigationsverhalten. Wenn Sie am linken Rand nach rechts wischen, wird zurückgegangen (und selbst wenn dies die erste Seite im Registerkartenverlauf ist, wird immer noch zum Startbildschirm zurückgekehrt).
Naktinis