Como estoy proporcionando detalles adicionales, estoy escribiendo mi propia respuesta basada en el original (en lugar de editarlo).
Sí, hay una manera de hacerlo, pero este método solo funciona para Facebook y Messenger basados en la web; no puedes hacer algo similar para las aplicaciones móviles.
Básicamente, Facebook usa solicitudes cronometradas en el lado del servidor para verificar si el cliente todavía está disponible. Por lo tanto, el front end (página web cargada de Facebook) enviará periódicamente una solicitud HTTP ( XHR ) con el tiempo de inactividad a sus servidores.
Aquí hay un ejemplo de tal solicitud:
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
Nota: He reemplazado la ID de usuario que normalmente sería un número.
Si lee la URL anterior, verá la parte que dice inactivo = 117 . Esto denota el número total de segundos que la cuenta ha estado inactiva. El estado = sin conexión significa si el chat está activado o desactivado.
Entonces, para deshabilitar esto, simplemente agregue la siguiente regla a la lista personalizada de filtros de su bloqueador de anuncios:
||*-edge-chat.facebook.com^$xmlhttprequest
Para deshabilitar en Facebook y Messenger, puede agregar las siguientes dos líneas:
||*-edge-chat.facebook.com^$xmlhttprequest
||*-edge-chat.messenger.com^$xmlhttprequest
O la línea única, usando expresiones regulares :
/^https?\:\/\/\d+-edge-chat\.(facebook|messenger)\.com\/?/$xmlhttprequest
Algunos inconvenientes de este método son que no podrá recibir mensajes en tiempo real y no aparecerá en línea incluso si el chat está activado. Tendrá que actualizar la página para recibir nuevos mensajes.
Para evitar estos dos inconvenientes, aquí hay una solución alternativa. Puede agregar esta línea en su lugar:
/^https?\:\/\/\d+-edge-chat\.facebook\.com\/pull\?.*state=offline/$xmlhttprequest
O bien, agregue esto para Facebook y Messenger:
/^https?\:\/\/\d+-edge-chat\.(facebook|messenger)\.com\/pull\?.*state=offline/$xmlhttprequest
El resultado final de esto será el siguiente:
- Cuando su chat esté apagado, no aparecerá en línea, su última actividad no será reportada y no podrá recibir mensajes en tiempo real.
- Cuando su chat esté activado, aparecerá en línea, se informará su última actividad y podrá recibir mensajes en tiempo real.
Desafortunadamente, parece que no hay otra solución ya que el front-end de Facebook puede recuperar mensajes solo cuando el cliente informa periódicamente que está activo, por lo tanto, la recuperación se realiza una vez que se informa la última actividad. Ambas acciones son posibles gracias a un único script de fondo ( * -edge-chat.facebook.com / pull ), a través de la misma solicitud; por lo tanto, no puedes tener uno sin el otro.