Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
2 tasks done
carolineBda opened this issue Oct 10, 2024 · 5 comments · Fixed by #6226
Closed
2 tasks done
Assignees

Comments

@carolineBda
Copy link
Contributor

carolineBda commented Oct 10, 2024

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

  • Le faire que sur le DSFR
  • Prévoir un message si l'utilisateur a un adblock quand il répond oui/non
@m-maillot m-maillot added the DSFR label Oct 14, 2024
@maxgfr maxgfr self-assigned this Oct 16, 2024
@maxgfr
Copy link
Member

maxgfr commented Oct 17, 2024

Pour information, @gary-van-woerkens a réussi à contourner le adblock via un proxy : SocialGouv/support#653 (comment)

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

@maxgfr
Copy link
Member

maxgfr commented Oct 17, 2024

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

@maxgfr
Copy link
Member

maxgfr commented Oct 17, 2024

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
Copy link
Member

maxgfr commented Oct 17, 2024

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
Copy link
Member

maxgfr commented Oct 17, 2024

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à : #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 :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
3 participants