web-dev-qa-db-fra.com

iOS 7 - existe-t-il un moyen de désactiver la fonctionnalité de balayage avant et arrière dans Safari?

Pour certaines pages Web, nous utilisons les fonctions de glissement gauche et droit de l'iPhone pour afficher les menus. Désormais, avec iOS7, ils ont introduit la possibilité de revenir en arrière et d'avancer aux pages précédentes et suivantes de l'historique du navigateur en glissant les mouvements à gauche et à droite.

Mais y a-t-il un moyen de le désactiver pour des pages spécifiques afin de ne pas avoir un comportement conflictuel sur les actions de balayage?

75
MeghaK

Non, cela se fait au niveau du système d'exploitation et la page Web ne reçoit aucun rappel.

Voir ce résumé des modifications apportées à Safari dans iOS7 qui pourrait causer des problèmes à votre site Web (y compris ce geste de balayage)

15
Vinzzz

Vous ne pouvez pas le désactiver directement, mais le balayage natif en arrière ne se produit que s'il existe quelque chose dans l'historique du navigateur.

Cela ne fonctionnera pas dans tous les cas, mais si vous avez une application Web d'une seule page ouverte dans un nouvel onglet, vous pouvez l'empêcher d'ajouter à l'historique en utilisant

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

au lieu de pushState ou

document.location.hash = url
12
Tom Clarkson

Je devais utiliser 2 approches:

1) CSS ne corrige que pour Chrome/Firefox

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

2) Correction JavaScript pour Safari

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

Au fil du temps, Safari implémentera overscroll-behavior-x et nous pourrons supprimer le piratage JS.

4
John Doherty