Puisque je fournis des détails supplémentaires, j'écris ma propre réponse sur la base de l' original (au lieu de la modifier).
Oui, il existe un moyen de le faire, mais cette méthode ne fonctionne que pour Facebook et Messenger sur le Web; vous ne pouvez pas faire quelque chose de similaire pour les applications mobiles.
Fondamentalement, Facebook utilise des requêtes chronométrées côté serveur pour vérifier si le client est toujours disponible. Ainsi, le frontal (page Web Facebook chargée) enverra périodiquement une requête HTTP ( XHR ) avec le temps d'inactivité à leurs serveurs.
Voici un exemple d'une telle demande:
https://1-edge-chat.facebook.com/pull?channel=p_<UserID>&seq=0&partition=-2&clientid=18ae8ecc&cb=ie3k&idle=117&qp=y&cap=8&msgs_recv=0&uid=userid&viewer_uid=userid&msgr_region=FRC&state=offline
Remarque: j'ai remplacé l'ID utilisateur qui serait normalement un nombre.
Si vous lisez l'URL ci-dessus, vous verrez la partie disant idle = 117 . Cela indique le nombre total de secondes pendant lesquelles le compte a été inactif. L' état = hors ligne indique si le chat est activé ou désactivé.
Donc, pour désactiver cela, ajoutez simplement la règle suivante à la liste personnalisée de filtres de votre bloqueur de publicités:
||*-edge-chat.facebook.com^$xmlhttprequest
Pour désactiver sur Facebook et Messenger, vous pouvez ajouter les deux lignes suivantes:
||*-edge-chat.facebook.com^$xmlhttprequest
||*-edge-chat.messenger.com^$xmlhttprequest
Ou la ligne unique, en utilisant l' expression régulière :
/^https?\:\/\/\d+-edge-chat\.(facebook|messenger)\.com\/?/$xmlhttprequest
Quelques inconvénients de cette méthode sont que vous ne pourrez pas recevoir de messages en temps réel et que vous n'apparaîtrez pas en ligne même si le chat est activé. Vous devrez actualiser la page pour recevoir de nouveaux messages.
Afin d'éviter ces deux inconvénients, voici une solution de contournement. Vous pouvez ajouter cette ligne à la place:
/^https?\:\/\/\d+-edge-chat\.facebook\.com\/pull\?.*state=offline/$xmlhttprequest
Ou ajoutez ceci pour Facebook et Messenger:
/^https?\:\/\/\d+-edge-chat\.(facebook|messenger)\.com\/pull\?.*state=offline/$xmlhttprequest
Le résultat final de ceci sera le suivant:
- Lorsque votre conversation est désactivée, vous n'apparaissez pas en ligne, votre dernière activité ne sera pas signalée et vous ne pourrez pas recevoir de messages en temps réel.
- Lorsque votre chat est activé, vous apparaissez en ligne, votre dernière activité est signalée et vous pouvez recevoir des messages en temps réel.
Malheureusement, il ne semble pas y avoir d'autre solution puisque le front-end de Facebook ne peut récupérer des messages que lorsque le client signale périodiquement qu'ils sont actifs, d'où la récupération est effectuée une fois la dernière activité signalée. Ces deux actions sont rendues possibles par un seul script principal ( * -edge-chat.facebook.com / pull ), via la même demande; par conséquent, vous ne pouvez pas en avoir un sans l'autre.