Extension de navigateur
Le Zenovay Analytics Inspector est une WebExtension Chrome + Firefox qui détecte le script de tracking Zenovay sur n'importe quelle page et affiche les événements en direct dans une popup. C'est un outil de diagnostic — une alternative plus rapide, dans le navigateur, à l'ouverture des DevTools ou au flux de vérification d'installation du tableau de bord.
Aucune télémétrie. L'extension ne fait jamais d'appels réseau vers Zenovay. Tout l'état réside dans chrome.storage.session et est effacé à la fermeture du navigateur.
Installation
Chrome Web Store
Bientôt disponible — paquet de soumission préparé. Nous mettrons un lien direct ici dès l'approbation.
Firefox Add-ons (AMO)
Bientôt disponible — paquet de soumission préparé.
Depuis le code source (développeurs)
git clone https://github.com/zenovay/extension-zenovay.git
cd extension-zenovay
npm install
npm run build
Puis dans Chrome, ouvrez chrome://extensions, activez le mode développeur (interrupteur en haut à droite), cliquez sur Charger l'extension non empaquetée et choisissez le répertoire dist/.
Dans Firefox, ouvrez about:debugging#/runtime/this-firefox, cliquez sur Charger un module temporaire et choisissez dist/manifest.json.
Comment lire le badge
| Badge | Signification |
|---|---|
| (vide) | Aucun script de tracking Zenovay détecté sur cette page |
Ambre ! | Script détecté, mais aucun événement déclenché pour l'instant |
Vert ON | Script détecté et événements actifs |
Bleu C | Script détecté, mode sans cookies |
L'état du badge est par onglet, donc une seule session de navigateur peut afficher différents états pour différents sites simultanément.
Ce que montre la popup
Quand vous cliquez sur le badge, la popup rapporte :
- Carte de statut — état de détection actuel, avec un point pulsant tant que des événements sont actifs
- Code de tracking — l'ID du projet (par ex.
ZV_abc123…) - Source du script — l'URL depuis laquelle le tracker est chargé
- Cookieless — si
data-cookieless="true"est défini sur la balise script OUcookielessMode: truedansZENOVAY_TRACKER_CONFIG - GPC — si l'utilisateur a activé Global Privacy Control dans les paramètres du navigateur
- Endpoint API — où le tracker envoie les événements
- Événements en direct — liste défilante des 50 derniers événements (type + temps relatif)
- Ouvrir dans le tableau de bord Zenovay — lien profond vers le tableau de bord correspondant
Événements en direct : Voie A vs Voie B
Le tracker Zenovay n'émet l'événement personnalisé zenovay:debug:event que lorsque le site définit data-debug="true". Les sites en production ne le font généralement pas.
Voie B (par défaut). L'extension écoute zenovay:debug:event et vide window._zenovayDebugBus. Sur une page en mode debug (ou sur app.zenovay.com), vous verrez des événements s'afficher. Sur un site en production sans mode debug, la popup affiche :
Activez
data-debug="true"sur la balise script pour voir les événements en direct, ou activez l'inspection approfondie ci-dessous.
Voie A (opt-in). Activez Beta : inspection approfondie dans la popup. L'extension patche navigator.sendBeacon et window.fetch pour intercepter les POSTs d'événements vers l'API du tracker. Fonctionne sur tous les sites, avec deux réserves :
- L'extension peut entrer en conflit avec d'autres extensions qui patchent aussi les appels réseau.
- Les événements déclenchés avant l'activation du toggle ne sont pas capturés. Si 3 secondes s'écoulent sans événement, la popup propose un Recharger en un clic pour capturer la pageview initiale.
Nous marquons la Voie A comme Beta jusqu'à avoir collecté des retours sur les collisions. Désactivez-la si vous voyez un comportement étrange sur un site.
Signaux de détection
L'extension sonde cinq sources, dans cet ordre, toutes dans le MAIN world de la page :
- Scan des balises script —
script[src*="/z.js"],script[src*="zenovay-tracker"],script[data-id],script[data-tracking-code],script[data-website-id]. - Sonde globale —
typeof window.zenovay === 'function', vérifié jusqu'à 5 secondes par intervalles de 200 ms. - Sonde de configuration — lit
window.ZENOVAY_TRACKER_CONFIGsi le tracker a été chargé via l'endpoint/load(avec config injectée depuis le tableau de bord). - Abonnement événement — écoute
zenovay:debug:eventsurwindow. - Vidange de buffer — capture un snapshot de
window._zenovayDebugBuss'il existe.
Un seul signal suffit à marquer une page comme « détectée ».
Permissions
| Permission | Pourquoi |
|---|---|
activeTab | Lire le DOM de l'onglet actif quand vous ouvrez la popup |
storage | Mettre en cache les 50 derniers événements par onglet en session storage |
scripting | Injecter la sonde de détection dans le MAIN world de la page |
host_permissions: <all_urls> | Détecter Zenovay sur tous les sites que vous visitez |
Explicitement non demandées : tabs, webRequest, cookies, history, bookmarks, downloads. L'extension ne peut pas lire vos autres onglets, votre historique ou vos mots de passe enregistrés.
Confidentialité
L'Inspector est construit pour honorer la posture cookieless plus large de Zenovay :
- Aucun appel réseau — l'extension n'envoie jamais de données à api.zenovay.com ni nulle part ailleurs.
- Aucun cookie — ni l'extension elle-même ni son UI n'écrivent de cookies. L'état du toggle réside dans
chrome.storage.local(quelques octets pour la préférence Beta : inspection approfondie). Les données d'événements par onglet résident danschrome.storage.session, effacé à la fermeture du navigateur. - Pas de stockage persistant de payloads — les patches de la Voie A parsent les corps d'événements uniquement en mémoire.
- Le deep-link est déclenché par l'utilisateur — cliquer sur Ouvrir dans le tableau de bord Zenovay est la seule action sortante, et elle nécessite un clic délibéré.
Dépannage
Le badge reste vide sur un site dont je suis sûr qu'il a Zenovay
- Rechargez l'onglet en force (Cmd/Ctrl + Maj + R). La sonde injectée tourne à
document_idle; un rechargement frais lui donne une chance propre. - Inspectez le source de la page pour des motifs
script srccorrespondant à/z.js,zenovay-tracker, oudata-id="…". Si aucun n'est présent, le script n'est en fait pas chargé. - Vérifiez la CSP du site — une directive
script-srcstricte pourrait bloquer le tracker entièrement.
Le badge affiche ambre ! mais j'attends des événements
C'est la Voie B fonctionnant comme prévu. Le script est chargé mais n'émet pas zenovay:debug:event parce que le site n'a pas data-debug="true". Activez Beta : inspection approfondie dans la popup, puis rechargez.
La liste d'événements est vide après activation de l'inspection approfondie
Si une bannière d'indice apparaît dans les 3 secondes — cliquez sur Recharger. La pageview initiale du tracker se déclenche une fois par chargement de page ; la Voie A ne capture que les événements à partir du moment où elle a été activée.
L'indicateur cookieless montre ✗ mais j'ai configuré cookieless
data-cookieless="true" doit être sur la balise <script> elle-même, en chaîne "true". Vérifiez :
<script src="https://api.zenovay.com/z.js" data-id="VOTRE_CODE" data-cookieless="true"></script>
Pas data-cookieless (présence seule) ni data-cookieless="1". Le tracker le lit avec une correspondance stricte de chaîne.
Open source
L'extension est sous licence MIT et développée ouvertement sur github.com/zenovay/extension-zenovay. Issues et pull requests bienvenus.