SocialGouv / code-du-travail-numerique

Code du Travail Numérique
https://code.travail.gouv.fr
Apache License 2.0
107 stars 22 forks source link

Ne pas charger l'encart "Avez-vous trouvé la réponse à votre question ?" si matomo n'est pas lancé #6201

Closed carolineBda closed 2 weeks ago

carolineBda commented 1 month ago

Aujourd'hui si l'utilisateur a un adblock, on lui laisse entrer son feedback sur le site mais derrière rien n'est envoyé !

maxgfr commented 4 weeks ago

Pour information, @gary-van-woerkens a réussi à contourner le adblock via un proxy : https://github.com/SocialGouv/support/issues/653#issuecomment-2414466598

Est-ce nécessaire de mettre cela en place ?

maxgfr commented 4 weeks ago

D'autant plus si on implémente comme ce que nous a partagé Gary

maxgfr commented 4 weeks ago

L'approche utilisé par les détecteurs d'adblocker est de lancer un call sur un serveur de tracking Google. Sous le capot, cela fait ça :

import { useEffect, useState } from "react";

export const useDetectAdBlock = () => {
  const [adBlockDetected, setAdBlockDetected] = useState(false);

  useEffect(() => {
    // grab a domain from https://github1s.com/gorhill/uBlock/blob/master/docs/tests/hostname-pool.js
    const url = "https://www3.doubleclick.net";
    fetch(url, {
      method: "HEAD",
      mode: "no-cors",
      cache: "no-store",
    })
      .then(({ redirected }) => {
        if (redirected) setAdBlockDetected(true);
      })
      .catch(() => {
        setAdBlockDetected(true);
      });
  }, []);

  return adBlockDetected;
};

Premièrement, on doit, donc modifier nos CSP en ajoutant :

https://www3.doubleclick.net https://marketingplatform.google.com/about/enterprise/

Deuxiement, cela signifie qu'à chaque page, on lance une requête au serveur Google de la sorte pour tester si cela fonctionne ou non...

Donc à chaque page où on a ce bandeau Avez-vous trouvé la réponse, on fait un call supplémentaire....

Ce n'est pas viable pour moi....

Pour moi, il serait plus intéressant de mettre le proxy que propose @gary-van-woerkens ou alors mettre un proxy sur ce composant de sorte que ce soit le serveur qui envoie la réponse du questionnaire

maxgfr commented 4 weeks ago

Il y a ce repository qui propose différente approche : https://github.com/arjun-menon/multi-adblock-detect

Cela revient au même, car on a deux approches globalement :

1) Utilisation du fetch sur un provider publicitaire 2) Chargement d'un script publicitaire localement, cela évite de faire un call, mais la contrepartie est d'avoir du code dans notre folder public

maxgfr commented 4 weeks ago

J'ai trouvé une approche en me basant sur celle plus haut qui permet d'utiliser notre matomo afin d'éviter de call la régie publicitaire de Google pour savoir si le call est bloqué ou non

Même pas besoin d'une librairie externe, la PR est dispo là : https://github.com/SocialGouv/code-du-travail-numerique/pull/6227

L'approche est bien meilleure, c'est clean et je pense que là oui ça peut valoir le coup de l'intégrer de la sorte :)