Quelqu’un signale qu’une page est cassée. Vous lui demandez de l’ouvrir dans une fenêtre de navigation privée. Là, elle fonctionne. La conversation s’arrête généralement ici, sur un conseil de vider le cache, et c’est précisément à ce moment que l’information est jetée.

La navigation privée n’est pas un navigateur propre. C’est votre navigateur avec une liste précise et assez courte de choses désactivées, et cette liste constitue tout l’intérêt du test. La connaître transforme une phrase de la personne qui signale en une bissection que vous terminez en quelques minutes.

Ce qu’une fenêtre de navigation privée change réellement

Cinq différences, et la plupart des gens ne savent en nommer que deux.

Les extensions ne s’exécutent pas. C’est la plus importante et celle que tout le monde oublie. La documentation des extensions de Chrome décrit la clé de manifeste concernée comme la façon dont une extension se comporte “if allowed to run in incognito mode” : l’autorisation est désactivée jusqu’à ce que quelqu’un l’active, extension par extension, dans Détails puis “Autoriser en navigation privée”. Une fenêtre privée est donc presque toujours aussi une fenêtre sans extensions, et c’est cet amalgame qui rend le test ambigu.

Aucun cookie de votre session normale. La fenêtre démarre sans aucun et jette ce qu’elle récolte. Selon les mots de Chrome, elle “temporarily keeps some information, like cookies and site data, to help websites work and support navigation”, et “this information is removed when the Incognito session ends”.

Les cookies tiers sont bloqués. Indépendamment du point précédent et par défaut : “In Incognito mode, third-party cookies are blocked by default.” Celui-ci change le résultat dans la direction opposée aux autres, ce sur quoi il vaut la peine de s’arrêter plus bas.

Aucun cache ni données de site stockées à réutiliser. Rien de ce que votre profil normal a téléchargé la semaine dernière n’attend là pour être servi à nouveau, y compris ce que le navigateur avait décidé de conserver.

Les service workers que vous avez enregistrés ne sont pas là. Un service worker appartient au stockage d’un profil. La session privée a le sien, qui est vide, donc ce qui intercepte les requêtes dans la fenêtre normale est tout simplement absent.

Le sens dans lequel le test échoue compte

La même expérience a deux issues et elles ne veulent pas dire la même chose. Presque personne ne raisonne sur la seconde.

Fonctionne en navigation privée, cassé en navigation normale
Quelque chose dans son profil est en cause : une extension, une ressource obsolète en cache, un service worker qui sert le code de la semaine dernière, ou un cookie contenant un état que votre application lit.
Cassé en navigation privée, fonctionne en navigation normale
Il manque quelque chose dont votre page dépend : un cookie tiers, une session connectée, ou des données que vous supposiez présentes dans le stockage parce qu'elles l'ont toujours été sur votre machine.

Le second cas est celui que l’on écarte en disant que la navigation privée est bizarre. Elle ne l’est pas. C’est la seule façon bon marché, pour la plupart des gens, de reproduire ce que vit un visiteur qui arrive pour la première fois, et si votre page casse pour lui, elle casse pour tous ceux qui ne sont jamais venus.

Séparer les cinq suspects sans deviner

La faiblesse du test de navigation privée est qu’il change cinq choses à la fois : un succès vous dit que l’une des cinq est responsable, pas laquelle. Ces étapes les séparent, de la moins coûteuse à la plus coûteuse.

  • Un profil de navigateur neuf avec les extensions activées. C’est le test que la navigation privée aurait dû être : cookies neufs, cache neuf, stockage neuf, mais vos extensions toujours en marche. Si le problème revient ici, ce n’est pas une extension, et vous avez éliminé la cause la plus fréquente en une trentaine de secondes.
  • Un rechargement forcé avec le panneau réseau ouvert et “Disable cache” coché. Sépare les ressources obsolètes du reste. Si cela règle le problème, vous avez un souci de cache et le navigateur de cette personne se comporte exactement comme on le lui a demandé.
  • Effacer les données du site pour cette origine. Dans le panneau Application, cela supprime les cookies, le stockage local et l’enregistrement du service worker en une seule action. Si le problème disparaît, la cause était un état et non du code, et la question suivante est de savoir lequel.
  • Désinscrire le service worker séparément. Cela vaut la peine de le faire à part, car si c’est la solution, cette personne exécutait du code que vous ne livrez plus, et aucun déploiement ne l’atteindra tant que le worker ne se sera pas mis à jour.

Effectuées dans cet ordre, ces étapes donnent une cause plutôt qu’une corrélation. La navigation privée seule donne une phrase devant laquelle tout le monde hoche la tête.

Ce que “ça marche en navigation privée” ne veut pas dire

Cela ne veut pas dire que le problème est sur sa machine, et cela ne veut pas dire que ce n’est pas votre bug.

Un service worker qui sert un bundle périmé, c’est votre déploiement. Un cookie que votre application a écrit puis n’a pas su relire, c’est votre code. Une extension qui casse votre page, c’est au minimum votre problème de compatibilité si beaucoup de vos utilisateurs l’ont. La seule lecture réellement dangereuse est celle qui est faite le plus souvent : que la page va bien et que l’ordinateur de la personne, non.

Cela ne se transpose pas non plus dans l’autre sens. Qui ne teste qu’en navigation privée teste pour toujours le parcours de première visite et ne verra jamais le bug qui a besoin d’un cookie vieux d’une semaine pour se manifester.

Comment le demander correctement

Pour la personne qui signale, c’est l’un des rares diagnostics qui ne coûte rien et n’exige aucun vocabulaire : ouvrez une fenêtre privée, allez sur la même page, et dites-moi si elle fait la même chose. C’est la meilleure question de la liste, et elle est assez bon marché pour être posée en premier.

Ce qu’elle ne peut pas vous donner, c’est le pourquoi. L’erreur de console, la requête en échec et la version du script réellement exécutée restent ce qui tranche, et aucune de ces choses ne survit à la fermeture de la fenêtre.

Session Replay

Extension Chrome gratuite. Un clic sur la page qui se comporte mal capture la capture d'écran, la console et le journal réseau, et vous donne un lien à coller dans le ticket.

Installer l'extension

Une réserve sur l’usage de n’importe quelle extension pour cela, y compris la nôtre : une fenêtre privée ne l’exécutera pas si elle n’y a pas été autorisée, et c’est la règle même qui rend le test utile au départ.

En bref

  • La navigation privée désactive cinq choses d’un coup : extensions, cookies existants, cookies tiers, cache et service workers.
  • Le sens dans lequel le test échoue vous dit quelle moitié de cette liste regarder.
  • Un profil neuf avec les extensions activées est l’étape suivante qui sépare la cause la plus fréquente des autres.
  • “Ça marche en navigation privée” est le début du diagnostic. Le traiter comme la fin, c’est ainsi qu’un service worker périmé survit à trois déploiements.